捕获python程序的标准输出

时间:2014-04-22 20:18:21

标签: c# python redirectstandardoutput

我试图编写一个C#程序来捕获python程序中的标准输出。我的问题是所有输出都是在程序执行后而不是实际发生时发生的。作为一个例子,对于这个python程序:

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

我希望得到"你好",两秒差距,然后另一个"你好"。实际结果是两秒差距然后" Hello"," 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");

使用此代码,我得到" Hello",两秒间隙,然后另一个" Hello"。

知道为什么吗?如何让python解释器在发生时发送标准输出?

3 个答案:

答案 0 :(得分:3)

我知道这已经过时了,但是运行-thon(无缓冲)的python似乎就是你所追求的

答案 1 :(得分:1)

您需要刷新输出缓冲区。

import sys
sys.stdout.flush()

请参阅此问题:How to flush output of Python print?

答案 2 :(得分:0)

好 (捕获python程序的标准输出) 需要Em控制台: 导入系统 sys.stdout.flush()