有没有什么方法可以用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?
6 个回答
2
最简单的方法
import commands
cmd = "ls -l"
output = commands.getoutput(cmd)
3
os.system这个函数会返回你执行的命令的退出代码,而不是它的输出内容。如果你想获取命令的输出,你需要使用commands.getoutput(这个方法已经不推荐使用了)或者subprocess.Popen:
from subprocess import Popen, PIPE
stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()
23
os.system
这个函数会返回一个值,告诉你命令是否执行成功或者失败。但它不会把命令的输出结果(比如正常输出或错误信息)返回给你。如果你想获取这些输出信息,可以使用 subprocess.Popen
。
import subprocess
proc=subprocess.Popen('echo "to stdout"', shell=True, stdout=subprocess.PIPE, )
output=proc.communicate()[0]
print output