捕捉Python程序的标准输出,因为它发生(Capture standard output of a

2019-10-19 23:10发布

我想写捕捉Python程序的标准输出C#程序。 我的问题是,该方案已被执行之后,而不是当它实际发生的所有输出来。 作为一个例子,对于这个Python程序:

print "Hello"
time.sleep(2)
print "Hello"

我希望得到“你好”,两​​秒钟的间隙,然后又是“你好”。 实际的结果是两个第二间隙,然后“你好”,“你好”。

如果我运行在命令行上python脚本,我得到所需的行为。 如果在命令提示符下可以做到这一点,那么我应该能够模仿的功能,而不必重复刷新缓冲区。

我用它来运行从C#的过程:

_proc = new Process
            {
                StartInfo = new ProcessStartInfo
                                {
                                    FileName = "C:\\Python27\\python.exe",
                                    Arguments = pyScript,
                                    RedirectStandardError = true,
                                    UseShellExecute = false,
                                    RedirectStandardOutput = true,
                                    CreateNoWindow = true
                                }
            };
_proc.OutputDataReceived += ProcOnOutputDataReceived;
_proc.Start(); 
_proc.BeginOutputReadLine();

我可以运行此C#代码(和改变上述的ProcessStartInfo属性运行C#可执行文件)和其行为正确:

Console.WriteLine("Hello");
Thread.Sleep(2000);
Console.WriteLine("Hello");

有了这个代码,我得到“你好”,两​​秒钟的间隙,然后又是“你好”。

任何想法,为什么? 我怎样才能获得Python解释器,因为它发生送标准输出?

Answer 1:

我知道这是旧的,但运行带有-u蟒(无缓冲)似乎是你是什么之后



Answer 2:

您需要刷新输出缓冲区。

import sys
sys.stdout.flush()

看到这个问题: 如何刷新蟒纹的输出?



文章来源: Capture standard output of a python program as it happens