2
我有一个脚本调用ffprobe,解析其输出并将其输出到控制台。Subprocess.communicate打印换行到标准输出
下面是它的一个精简版本,而不解析代码和命令行选项:
"""Invoke ffprobe to query a video file and parse the output"""
def ffprobe(fname):
import subprocess as sub
import re
p = sub.Popen(['ffprobe', fname], stderr=sub.PIPE)
stdout, stderr = p.communicate()
def main():
ffprobe("foo.mp4")
#print options.formatstr % locals()
if __name__ == '__main__':
main()
你可以看到,在我的代码的唯一print
语句被注释掉,所以程序不应该真的输出任何东西不过,这是我得到的:
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
[email protected]:~/co/youtube$ python ffprobe.py foo.mp4
换行是由每个调用神秘地输出。它来自哪里,我该如何处理它?
似乎有一个类似的SO问题,除非它不使用communicate
调用(http://stackoverflow.com/questions/7985334/python-subprocess-proc-stderr-read-introduce-extra-lines)。
谢谢。从ffprobe捕获标准输出的技巧。你说得对,我错误地把'stdout'称为'stdin' - 我有点急。我已经纠正了这个错误。 – misha 2012-01-01 10:29:17