我正在尝试编写一个 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 解释器在发生时发送标准输出?