Python 如何捕获管道化进程生成的子进程的输出?
我想连续监视一个管道进程,并在它进入时打印它的Python 如何捕获管道化进程生成的子进程的输出?,python,subprocess,pipe,stdout,Python,Subprocess,Pipe,Stdout,我想连续监视一个管道进程,并在它进入时打印它的stdout和stderr(我不想在它退出后立即获得整个输出)。问题是,管道化进程生成了另一个子进程,并且该生成进程的stdout和stderr无法使用原始进程的管道进行访问 也就是说,我希望以这种方式运行python程序,因此管道化进程就是python解释器,但是python解释器会在另一个子进程中生成python程序的运行,因此我无法获得该程序的输出(实际的程序输出)。如果启动程序时出错,我可以得到它,因为这是打印到原始python解释器的std
stdout
和stderr
(我不想在它退出后立即获得整个输出)。问题是,管道化进程生成了另一个子进程,并且该生成进程的stdout
和stderr
无法使用原始进程的管道进行访问
也就是说,我希望以这种方式运行python程序,因此管道化进程就是python解释器,但是python解释器会在另一个子进程中生成python程序的运行,因此我无法获得该程序的输出(实际的程序输出)。如果启动程序时出错,我可以得到它,因为这是打印到原始python解释器的stderr
中的。但实际程序中正常的stdout
对我来说是丢失的
我正在使用subprocess.Popen
编辑:一位评论者要求提供一个代码示例,我认为这不会增加太多,但这是我的代码(PopenProcess
是subrpocess.Popen
的智能包装类,但没有什么特别之处):
作为管道流程而不是
subprocess.Popen(['python', 'myprog.py'])
应该使用
subprocess.Popen(['python', '-u', 'myprog.py'])
然后它就起作用了
问题出在缓冲输出上,而
-u
开关将此关闭(允许无缓冲输出)。您能提供代码示例吗?@Serge,我在问题中提供了我的代码
subprocess.Popen(['python', '-u', 'myprog.py'])