2010-03-15 4 views
9

Ich brauche die Dauer einer Videodatei über Python als Teil eines größeren Skripts. Ich weiß, ich kann ffmpeg verwenden, um die Dauer zu greifen, aber ich muss in der Lage sein, diese Ausgabe als eine Variable zurück in Python zu speichern. Ich dachte, das würde funktionieren, aber es gibt mir einen Wert von 0:Gibt es eine Möglichkeit, die Terminalausgabe einer Variablen mit Python zuzuordnen?

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

Bin ich die Ausgabe Redirect falsch? Oder gibt es einfach keine Möglichkeit, die Terminalausgabe zurück in Python zu pipen?

Antwort

17

os.system gibt einen Rückgabewert zurück, der den Erfolg oder Misserfolg des Befehls angibt. Die Ausgabe von stdout oder stderr wird nicht zurückgegeben. Um die Ausgabe von stdout (oder stderr) zu erhalten, verwenden Sie subprocess.Popen.

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

Siehe wunderbar Python Module of the Week blog geschrieben.

3

os.system gibt den Exit-Code des ausgeführten Befehls zurück, nicht dessen Ausgabe. Dazu müssen Sie entweder commands.getoutput verwenden (veraltet) oder subprocess.Popen:

from subprocess import Popen, PIPE 

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

Viele einfachste Weg

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

Einfach, aber veraltet: https: // docs. python.org/2/library/commands.html –

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