Python子进程调用返回“未找到命令”,终端正确执行

时间:2012-02-29 20:53:07

标签: python shell terminal subprocess

我试图从python运行gphoto2,但没有成功。它只返回未找到的命令。 正确安装了gphoto,因为命令在终端中正常工作。

p = subprocess.Popen(['gphoto2'], shell=True, stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT, executable='/bin/bash')

for line in p.stdout.readlines():
    print line
p.wait()

/bin/bash: gphoto2: command not found

我知道osx终端(应用程序)有一些有趣的东西,但是我对osx的了解很少。

对此有什么想法吗?

修改

更改了部分代码,出现了其他错误

p = subprocess.Popen(['gphoto2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout:
    print line


    raise child_exception
OSError: [Errno 2] No such file or directory

修改

使用完整路径'/ opt / local / bin / gphoto2'

但是,如果有人想解释使用哪个shell或如何登录并且能够具有相同的功能..?

1 个答案:

答案 0 :(得分:7)

使用shell = True时,subprocess.Popen的第一个参数应该是字符串,而不是列表:

p = subprocess.Popen('gphoto2', shell=True, ...)

但是,如果可能,应尽量避免使用shell = True,因为它可以是security risk(请参阅警告)。

所以改为使用

p = subprocess.Popen(['gphoto2'], ...)

(当shell = False时,或者省略shell参数时,第一个参数应该是一个列表。)