为什么subprocess.call()在linux中显示错误?

时间:2016-02-20 10:17:37

标签: python linux python-2.7

让我们考虑Linux平台,我需要执行一个名为smart.exe的程序,该程序使用input.dat文件。这两个文件都放在同一目录中,每个文件具有相同的文件权限777.

现在如果我在终端窗口中运行以下命令,则完全执行smart.exe而没有任何错误。

$./smart.exe input.dat

另一方面,如果我使用下面名为my_script.py的python脚本放在同一目录中,那么我会收到错误。

my_script.py包含以下代码:

#!/usr/bin/python
import os, subprocess

exit_code = subprocess.call("./smart.exe input.dat", shell = False)

错误如下:

File "my_script.py", line 4, in <module>
exit_code = subprocess.call("./smart.exe input.dat", shell = False) 
File "/usr/lib64/python2.6/subprocess.py", line 478, in call

p = Popen(*popenargs, **kwargs)
File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__
    errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

有人可以告诉我为什么会这样。请注意,smart.exe大约需要10秒才能完全完成。这可能是问题的线索。

还请告知是否有其他方法可以从my_script.py运行smart.exe。非常感谢您的解决方案!

1 个答案:

答案 0 :(得分:2)

您应该决定是否需要shell支持。

如果您想使用shell(这里不需要),您应该使用exit_code = subprocess.call("./smart.exe input.dat", shell=True)。然后shell解释你的命令行。

如果您不想要它(因为您不需要它并希望避免不必要的复杂性),您应该exit_code = subprocess.call(["./smart.exe", "input.dat"], shell=False)

(在Linux下命名你的二进制文件.exe没有意义。)