Python monitoring stderr and stdout of a subprocess
我试图从python 2.7中启动一个程序(HandBreakCLI)作为子进程或线程。 我已经开始了,但我无法弄清楚如何监控它的stderr和stdout。
程序将其状态(完成%)和有关编码的信息分别输出到stderr和stdout。 我希望能够定期从适当的流中检索完成的%。
我已经尝试调用subprocess.Popen并将stderr和stdout设置为PIPE并使用subprocess.communicate,但是它等待直到进程被终止或完成然后检索输出。 对我没有好处。
我把它作为一个线程运行起来,但据我所知,我仍然必须最终调用subprocess.Popen来执行程序并运行到同一个墙上。
我是以正确的方式来做这件事的吗? 我还有哪些其他选择或如何按照描述使其工作?
我用ffmpeg做了同样的事。 这是相关部分的精简版。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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:一些快速测试显示可能实际上不需要