使用Popen运行本地二进制文件时出现'file not found'错误

时间:2013-09-17 17:13:28

标签: python subprocess

我正在编写一个Python程序,用Popen调用本地二进制文件来捕获其输出。我用os.chdir将目录更改为它,我已经验证了该文件。但是,以下代码会引发“找不到文件”异常。

谁能告诉我我做错了什么?从我$ PATH中的目录运行程序有什么特别之处吗?提前谢谢。

try:
    os.chdir('/home/me')
    p = sub.Popen(['./exec', '--arg', 'arg1'], cwd=os.getcwd(), stdout=sub.PIPE)
    out, err = p.communicate()
    print("done")
except OSError as e:
    print("error %s" % e.strerror)

2 个答案:

答案 0 :(得分:4)

注意文档的this section(强调我的):

  

如果cwd不是None,则子项的当前目录将更改为   cwd在执行之前。 请注意,不考虑此目录   在搜索可执行文件时,您无法指定程序的路径   相对于cwd

尝试使用Popen的绝对路径。

p = sub.Popen(['/home/me/exec', '--arg', 'arg1'], stdout=sub.PIPE)

答案 1 :(得分:-2)

要从$ PATH运行程序,只需将shell=True传递给Popen。

编辑:

同样,正如OP所问,这可以从当前目录运行程序。