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'])