2011-09-09 15 views
7

Duplicar posibles:
Parsing a stdout in Pythonredirección subproceso a una variable como una cadena

con el siguiente comando, imprime '640x360'

>>> command = subprocess.call(['mediainfo', '--Inform=Video;%Width%x%Height%', 
'/Users/david/Desktop/1video.mp4']) 

640x360 

¿Cómo iba a establecer una variable igual a la cadena de la salida, entonces puedo obtener x='640x360'? Gracias.

Actualización: las respuestas se pueden encontrar aquí: Parsing a stdout in Python. Esto funcionó para mí:

>>> p1 = subprocess.Popen(['mediainfo', '--Inform=Video;%Width%x%Height%', 
    '/Users/david/Desktop/10stest720p.mov'],stdout=PIPE) 
>>> output=p1.communicate()[0].strip('\n') 
>>> output 
'1280x688' 

Respuesta

13

Si está utilizando 2.7, puede utilizar subprocess.check_output():

>>> import subprocess 
>>> output = subprocess.check_output(['echo', '640x360']) 
>>> print output 
640x360 

Si no es así:

>>> p = subprocess.Popen(['echo', '640x360'], stdout=subprocess.PIPE) 
>>> p.communicate() 
('640x360\n', None) 
4
import subprocess 
p = subprocess.Popen(["ls", "-al"], stdout=subprocess.PIPE) 
out, err = p.communicate() 
print out 
+0

yo era sólo escribiendo la misma respuesta, pero solo quería decir que sugeriría usar Popen en lugar de llamar porque es un poco más explícito y hace lo mismo. subprocess.call es solo una función de conveniencia para Popen. – Vorticity

+0

pero call() imprime el resultado y devuelve el código de salida de su proceso, es decir 0 si procesa correctamente. – rocksportrocker

+0

Ese es un buen punto que había olvidado. Dado que, call() puede ser la mejor forma de entrar en el pre 2.7, pero la respuesta de Scott Anderson probablemente sea mejor en 2.7 ya que automáticamente verifica el estado de salida nominal. – Vorticity

Cuestiones relacionadas