捕获python程序的标准输出
本文关键字:标准输出 程序 python 捕获 | 更新日期: 2023-09-27 17:59:41
我正在尝试编写一个C#程序,它可以捕获python程序中的标准输出。我的问题是,所有的输出都是在程序执行之后产生的,而不是在实际发生的时候。例如,对于这个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解释器在发生这种情况时发送标准输出?
我知道这是旧的,但运行带有-u
选项(无缓冲)的python
似乎就是你想要的。
未缓冲区不会在刷新输出之前等待。在没有此选项的情况下运行python,输出在以下情况下刷新:
- 缓冲区已满
- 您呼叫
sys.stdout.flush()
- 过程结束
您需要刷新输出缓冲区。
import sys
sys.stdout.flush()
请参阅以下问题:如何刷新Python打印的输出?
好(捕获python程序的标准输出)Em控制台需要:导入系统sys.stdout.flush()