我在模块上发现了一些问题,但更常见的问题似乎是让参数列表正确,我认为我已经管理了(最终)
我正在尝试运行一个程序,在命令行中需要这样的输入,
fits2ndf in out
' in'作为要转换的文件的文件路径,并且“退出”#39;是保存结果的路径和文件名。
所以使用Subprocess,
subprocess.call(["fits2ndf","/media/tom_hdd/Transfer/reference.fits","/media/tom_hdd/Transfer/reference.sdf"])
这引起了,
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
设置shell=TRUE
(我知道不好)会产生相同的结果。不确定它是否相关但我使用的是tcsh。有什么建议吗?
编辑以回答问题
我没有永久设置PATH,但fits2ndf
是我使用
% tcsh
% setenv STARLINK_DIR /home/tomq/star-kapuahi
% source $STARLINK_DIR/etc/login
% source $STARLINK_DIR/etc/cshrc
并且通常在任何目录中工作而不指定完整路径。
答案 0 :(得分:9)
which fits2ndf
会显示fit2ndf的路径。
之后,您可以编写给定代码的完整路径,它应该可以正常工作。
例如:
~$ which mv
/bin/mv
我的python代码:
import subprocess
subprocess.call(["/bin/mv","/tmp/a","/tmp/b"])
答案 1 :(得分:0)
您可能希望删除" /media/tom_hdd/Transfer/reference.sdf"
另外,请尝试将所有内容放在一个字符串中,例如"fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"
确保指向确切的方向。