让我们考虑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。非常感谢您的解决方案!
答案 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
没有意义。)