Я должен захватить продолжительность видеофайла с помощью Python как часть большего сценария. Я знаю, что могу использовать ffmpeg для захвата продолжительности, но я должен смочь сохранить тот вывод как переменную назад в Python. Я думал, что это будет работать, но это дает мне значение 0:
cmd = 'ffmpeg -i %s 2>&1 | grep "Duration" | cut -d \' \' -f 4 | sed s/,//' % ("Video.mov")
duration = os.system(cmd)
print duration
Я делаю выходное перенаправление неправильно? Или нет ли просто никакой способ передать терминальный вывод по каналу назад в Python?
os.system
возвращает возвращаемое значение, указывающее успешность или неудачу команды. Он не возвращает вывод из stdout или stderr. Чтобы получить вывод из stdout (или stderr), используйте subprocess.Popen
.
import subprocess
proc=subprocess.Popen('echo "to stdout"', shell=True, stdout=subprocess.PIPE, )
output=proc.communicate()[0]
print output
См. Прекрасно написанный блог Python Module of the Week .
Вам, вероятно, понадобится подпроцесс subprocess.Popen .
os.system возвращает код выхода выполненной команды, а не ее вывод. Для этого вам нужно будет использовать либо commands.getoutput (устарело), либо subprocess.Popen:
from subprocess import Popen, PIPE
stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()