我试图编写一个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解释器在发生时发送标准输出?
答案 0 :(得分:3)
我知道这已经过时了,但是运行-thon(无缓冲)的python似乎就是你所追求的
答案 1 :(得分:1)
答案 2 :(得分:0)
好 (捕获python程序的标准输出) 需要Em控制台: 导入系统 sys.stdout.flush()