【问题标题】:python subprocess.call() "no such file or directory"python subprocess.call()“没有这样的文件或目录”
【发布时间】:2012-12-09 10:54:50
【问题描述】:

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

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

fits2ndf in out

'in' 是要转换的文件的文件路径,'out' 是保存结果的路径和文件名。

所以使用子进程,

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

并且通常在任何目录中都可以在不指定完整路径的情况下工作。

【问题讨论】:

  • fits2ndf 在您的路径中吗?
  • 对不起,我不太明白你的问题,fits2ndf 包含在另一个目录中,但在没有完整路径的情况下在其他地方运行良好,但它不应该是 .fits 文件路径的一部分。
  • @Karthik 指的是您的 PATH 环境变量。你的 $PATH 中是否包含 fits2ndf 的目录,并且是 PATH 导出的?
  • 如果你给出fits2ndf的完整路径应该没问题。例如:/home/foo/fits2ndf
  • 是时候承认我对 unix 很陌生,并且通过遵循教程和提问来解决问题。 fit2ndf 几乎可以肯定不在我的道路上。问题已编辑,因为我无法在此处正确格式化代码?

标签: python subprocess tcsh


【解决方案1】:

which fits2ndf 会告诉你 fit2ndf 的路径。

之后,您可以编写代码的完整路径,它应该可以工作。

例如:

~$ which mv
/bin/mv

我的python代码:

import subprocess

subprocess.call(["/bin/mv","/tmp/a","/tmp/b"])

【讨论】:

  • 谢谢这个工作,有没有得到它,所以我不需要每次都指定 fit2ndf 的完整路径?事实上,理想情况下,我可以在没有路径的情况下使用该文件夹中的任何程序?这让事情变得非常混乱。
  • 可以从os.environ['PATH']获取系统PATH并进行修改,然后在env关键字参数中传入subprocess。注意env 想要一个字典;您可以复制所有os.environ 并修改副本中的PATH,尽管您运行的子进程通常不需要在环境中设置任何其他内容,因此只需使用@ 创建一个新字典就足够了987654331@会员。
【解决方案2】:

您可能想要删除" /media/tom_hdd/Transfer/reference.sdf" 中的空格

另外,尝试将所有内容放在一个字符串中,例如 "fits2ndf /media/tom_hdd/Transfer/reference.fits /media/tom_hdd/Transfer/reference.sdf"

确保您指向准确的方向。

【讨论】:

  • 好地方,谢谢。不幸的是,这只出现在写这个问题时,而不是在代码中,所以它没有改变任何东西。
猜你喜欢
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
相关资源
最近更新 更多