有没有什么方法可以使用python将终端输出分配给变量?

python redirect terminal ffmpeg

22938 观看

6回复

850 作者的声誉

我需要通过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?

作者: Gordon Fontenot 的来源 发布者: 2010 年 3 月 15 日

回应 (6)


17

536453 作者的声誉

决定

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模块

作者: unutbu 发布者: 15.03.2010 05:58

2

36769 作者的声誉

你可能想要subprocess.Popen

作者: msw 发布者: 15.03.2010 05:59

3

12251 作者的声誉

os.system返回已执行命令的退出代码,而不是其输出。要执行此操作,您需要使用commands.getoutput(不建议使用)或subprocess.Popen:

from subprocess import Popen, PIPE

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()
作者: mdeous 发布者: 15.03.2010 05:59

2

931 作者的声誉

最简单的方法

import commands
cmd = "ls -l"
output = commands.getoutput(cmd)
作者: Uahmed 发布者: 07.09.2012 01:38

0

111 作者的声誉

import commands
cmd = 'ls'
output = commands.getoutput(cmd)
print output
作者: Rafael Ortega Bueno 发布者: 02.05.2013 05:39

0

11 作者的声誉

!在/ usr / bin中/ python3

import subprocess nginx_ver = subprocess.getstatusoutput(“nginx -v”)print(nginx_ver)

作者: Chenna 发布者: 02.12.2018 03:10
32x32