我想写捕捉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解释器,因为它发生送标准输出?