Какой-либо способ присвоить терминальный вывод переменной с Python?

Я должен захватить продолжительность видеофайла с помощью 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?

9
задан Gordon Fontenot 15 March 2010 в 17:49
поделиться

3 ответа

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 .

20
ответ дан 4 December 2019 в 09:12
поделиться

Вам, вероятно, понадобится подпроцесс subprocess.Popen .

1
ответ дан 4 December 2019 в 09:12
поделиться

os.system возвращает код выхода выполненной команды, а не ее вывод. Для этого вам нужно будет использовать либо commands.getoutput (устарело), ​​либо subprocess.Popen:

from subprocess import Popen, PIPE

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()
3
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: