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

Adu*_*uen 8 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
Run Code Online (Sandbox Code Playgroud)

我知道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
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

unu*_*tbu 8

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

p = subprocess.Popen('gphoto2', shell=True, ...)
Run Code Online (Sandbox Code Playgroud)

但是,shell = True应尽可能避免使用,因为它可能存在安全风险(请参阅警告).

所以改为使用

p = subprocess.Popen(['gphoto2'], ...)
Run Code Online (Sandbox Code Playgroud)

(当shell = False或,如果shell省略参数,第一个参数应该是一个列表.)

  • 在终端尝试命令`which gphoto2`找到完整路径. (9认同)
  • 如果你使用`gphoto2`的完整路径会发生什么? (3认同)
  • 我会避免向代码添加完整路径......最好添加到`os.environ['PATH']`,因为不同的运行时环境可能有不同的路径 (2认同)