2010-03-15 23 views
9

Necesito tomar la duración de un archivo de video a través de python como parte de un script más grande. Sé que puedo usar ffmpeg para captar la duración, pero necesito poder guardar esa salida como una variable en Python. Pensé que esto funcionaría, pero me da un valor de 0:¿Hay alguna manera de asignar la salida del terminal a variable con python?

cmd = 'ffmpeg -i %s 2>&1 | grep "Duration" | cut -d \' \' -f 4 | sed s/,//' % ("Video.mov") 
duration = os.system(cmd) 
print duration 

¿Estoy haciendo el redireccionamiento de salida incorrecto? ¿O simplemente no hay forma de canalizar la salida del terminal nuevamente a Python?

Respuesta

17

os.system devuelve un valor de retorno que indica el éxito o el fracaso del comando. No devuelve la salida de stdout o stderr. Para tomar la salida de stdout (o stderr), use subprocess.Popen.

import subprocess 
proc=subprocess.Popen('echo "to stdout"', shell=True, stdout=subprocess.PIPE,) 
output=proc.communicate()[0] 
print output 

Vea la maravillosamente escrita Python Module of the Week blog.

3

os.system devuelve el código de salida del comando ejecutado, no su salida. Para ello se tendría que usar ya sea commands.getoutput (en desuso) o subprocess.Popen:

from subprocess import Popen, PIPE 

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout 
output = stdout.read() 
2

Mucho forma más sencilla

import commands 
cmd = "ls -l" 
output = commands.getoutput(cmd) 
+2

simple, aunque no se use: https: // docs. python.org/2/library/commands.html –

0
import commands 
cmd = 'ls' 
output = commands.getoutput(cmd) 
print output 
Cuestiones relacionadas