有什么方法可以用 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 中?

原文由 Gordon Fontenot 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 411
2 个回答

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

原文由 unutbu 发布,翻译遵循 CC BY-SA 4.0 许可协议

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 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题