2012-02-29 8 views
7

Sto provando a eseguire gphoto2 da python ma, senza successo. Restituisce solo il comando non trovato. gphoto è installato correttamente, come in, i comandi funzionano bene in Terminal.La chiamata subprocess Python restituisce "comando non trovato", il terminale viene eseguito correttamente

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 

So che c'è qualcosa di strano Terminal osx (app), ma, la mia conoscenza su OSX è magro.

Qualche idea su questo?

EDIT

cambiato alcuni del mio codice, altri errori appaiono

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

utilizzando il percorso completo '/ opt/local/bin/gphoto2'

ma se qualcuno cura di spiegare quale shell usare o come accedere ed essere in grado di avere la stessa funzionalità ..?

+1

Perché non usare 'subprocess.check_output() 'o emettere il tutto alla volta? – Gandaro

risposta

7

Quando si utilizza shell = True, il primo argomento di subprocess.Popen dovrebbe essere una stringa, non una lista:

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

Tuttavia, utilizzando shell = True dovrebbero essere evitati, se possibile, dal momento che può essere un security risk (vedi la Warning).

Così, invece usare

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

(quando shell = False, o se il parametro shell viene omesso, il primo argomento dovrebbe essere una lista.)

+0

grazie, refactored il mio codice correttamente sapere. Anche se non mi ha portato oltre. Ho modificato il mio post – Aduen

+3

Cosa succede se si utilizza il percorso completo per 'gphoto2'? – unutbu

+0

cercando di trovarlo ma, come detto, osx non è mio amico ... – Aduen

Problemi correlati