python subprocess.call()"没有这样的文件或目录"

时间:2012-12-09 10:54:50

标签: python subprocess tcsh

我在模块上发现了一些问题,但更常见的问题似乎是让参数列表正确,我认为我已经管理了(最终)

我正在尝试运行一个程序,在命令行中需要这样的输入,

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

并且通常在任何目录中工作而不指定完整路径。

2 个答案:

答案 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"

确保指向确切的方向。