Python监视子进程的stderr和stdout

我试图从python 2.7开始一个程序(HandBreakCLI)作为一个子进程或线程。 我已经开始,但我无法弄清楚如何监视它的stderr和stdout。

程序分别输出它的状态(%完成)和关于编码到stderr和stdout的信息。 我希望能够定期检索从适当的流中完成的%。

我已经尝试调用subprocess.Popen,将stderr和stdout设置为PIPE并使用subprocess.communicate,但它会一直等到进程终止或完成,然后检索输出。 对我没有好处。

我已经完成并作为一个线程运行,但据我所知,我仍然必须最终调用subprocess.Popen来执行该程序并运行到同一个墙上。

我是否以正确的方式去做这件事? 我还有什么其他选择,或者如何让这个按照所描述的方式工作?


我已经完成了与ffmpeg相同的功能。 这是相关部分的简化版本。 bufsize=1表示行缓冲,可能不需要。

def Run(command):
    proc = subprocess.Popen(command, bufsize=1,
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
        universal_newlines=True)
    return proc

def Trace(proc):
    while proc.poll() is None:
        line = proc.stdout.readline()
        if line:
            # Process output here
            print 'Read line', line

proc = Run([ handbrakePath ] + allOptions)
Trace(proc)

编辑1:我注意到子程序(在这种情况下,手刹)需要刷新行后才能使用(ffmpeg)。

编辑2:一些快速测试显示bufsize=1可能实际上并不需要。

链接地址: http://www.djcxy.com/p/77121.html

上一篇: Python monitoring stderr and stdout of a subprocess

下一篇: Python subprocess.Popen pipe custom fd