2012-02-29 18 views
7

Próbuję uruchomić gphoto2 z Pythona, ale bez powodzenia. Po prostu nie znaleziono polecenia. gphoto jest zainstalowany poprawnie, tak jak w, polecenia działają dobrze w Terminalu.Python wywołanie podprocesowe zwraca "command not found", Terminal wykonuje poprawnie

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 

Wiem, że jest coś zabawnego w Terminalu Osx (aplikacja), ale moja wiedza na temat osx jest skąpa.

Jakieś przemyślenia na ten temat?

EDIT

zmienił niektóre z moich kodu, pojawiają się inne błędy

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

użyciu pełnej ścieżki '/ opt/local/bin/gphoto2'

ale jeśli ktoś czy wyjaśnić, z której powłoki korzystać i jak się zalogować, i móc mieć tę samą funkcjonalność?

+1

Dlaczego nie używacie 'subprocess.check_output() 'lub wyprowadzić całość na raz? – Gandaro

Odpowiedz

7

Podczas korzystania shell = True, pierwszy argument subprocess.Popen powinna być ciągiem, a nie lista:

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

Jednak użycie shell = True należy unikać, jeśli to możliwe, ponieważ może to być security risk (patrz ostrzeżenia).

Więc zamiast używać

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

(Kiedy shell = False, lub jeśli parametr shell jest pominięta, pierwszy argument powinien być lista.)

+0

dzięki, refactored mój kod poprawnie wiem. Chociaż nie przynosiło mi to więcej. Zmieniłem swój post – Aduen

+3

Co się stanie, jeśli użyjesz pełnej ścieżki do 'gphoto2'? – unutbu

+0

próbuje go znaleźć, ale, jak powiedział, osx nie jest moim przyjacielem ... – Aduen

Powiązane problemy