2012-02-29 15 views
7

Estoy tratando de ejecutar gphoto2 desde python, pero sin éxito. Simplemente devuelve el comando no encontrado. gphoto está instalado correctamente, como en, los comandos funcionan bien en Terminal.Llamada al subproceso de Python devuelve "comando no encontrado", el terminal se ejecuta correctamente

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 

Sé que hay algo gracioso acerca de la terminal de osx (aplicación) pero, mi conocimiento sobre osx es escaso.

¿Alguna idea de esto?

EDITAR

cambiaron algunos de mi código, otros errores que aparecen

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 

EDITAR

usando ruta completa '/ opt/local/bin/gphoto2'

pero si alguien cuidado de explicar qué shell utilizar o cómo iniciar sesión y poder tener la misma funcionalidad ..?

+1

¿Por qué no usar 'subprocess.check_output() 'o salida todo a la vez? – Gandaro

Respuesta

7

Al utilizar shell = True, el primer argumento de subprocess.Popen debe ser una cadena, no una lista:

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

Sin embargo, el uso de shell = True se debe evitar si es posible, ya que puede ser un security risk (véase la advertencia).

Así que en lugar de utilizar

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

(Cuando shell = False, o si se omite el parámetro shell, el primer argumento debe ser una lista.)

+0

gracias, refactoré mi código correctamente. Aunque no me trajo más. He editado mi publicación – Aduen

+3

¿Qué sucede si usa la ruta completa a 'gphoto2'? – unutbu

+0

tratando de encontrarlo pero, como dije, osx no es mi amigo ... – Aduen

Cuestiones relacionadas