6

我正在编写一个 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)
4

2 回答 2

5

请注意文档的这一部分(重点是我的):

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

尝试使用带有Popen.

p = sub.Popen(['/home/me/exec', '--arg', 'arg1'], stdout=sub.PIPE)
于 2013-09-17T17:22:48.010 回答
-1

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

编辑:

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

于 2013-09-17T17:25:04.927 回答