Вызов подпроцесса Python возвращает «команда не найдена», Терминал выполняется правильно - PullRequest
8 голосов
/ 01 марта 2012

Я пытаюсь запустить gphoto2 из python, но безуспешно. Он просто возвращает команду не найдена. 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 скудны.

Есть мысли по этому поводу?

EDIT

изменил часть моего кода, появляются другие ошибки

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

EDIT

с использованием полного пути '/ opt / local / bin / gphoto2'

но если кто-то захочет объяснить, какую оболочку использовать или как войти в систему и иметь такую ​​же функциональность ...?

1 Ответ

7 голосов
/ 01 марта 2012

При использовании shell = True первый аргумент subprocess.Popen должен быть строкой, а не списком:

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

Однако следует по возможности избегать использования shell = True, поскольку это может быть риск безопасности (см. Предупреждение).

Поэтому вместо него используйте

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

(Когда shell = False или параметр shell пропущен, первыйаргумент должен быть списком.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...