Любой способ назначить вывод терминала для переменной с Python? - PullRequest
9 голосов
/ 15 марта 2010

Мне нужно захватить длительность видеофайла через 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?

Ответы [ 6 ]

20 голосов
/ 15 марта 2010

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 Blog .

3 голосов
/ 15 марта 2010

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

from subprocess import Popen, PIPE

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()
2 голосов
/ 07 сентября 2012

гораздо проще

import commands
cmd = "ls -l"
output = commands.getoutput(cmd)
1 голос
/ 15 марта 2010

Вы, вероятно, хотите подпроцесс. Открыть .

0 голосов
/ 02 декабря 2018
#!/usr/bin/python3
import subprocess 
nginx_ver = subprocess.getstatusoutput("nginx -v")
print(nginx_ver)
0 голосов
/ 02 мая 2013
import commands
cmd = 'ls'
output = commands.getoutput(cmd)
print output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...