gpt4 book ai didi

C# 进程的实时标准输出/错误捕获

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:05 24 4
gpt4 key购买 nike

我正在开发一个 C# 应用程序,我需要运行一个外部控制台进程(例如 python 脚本)并实时接收脚本的输出数据。 python 脚本是这样的:

import time
while 1:
print("Hi Foo!")
time.sleep(.3)

以下 C# 代码在 C# 控制台上实时打印 python 脚本输出:

static void Main(string[] args)
{
using (Process process = new Process())
{
process.StartInfo.FileName = "python.exe";
process.StartInfo.Arguments = "test.py";
process.StartInfo.UseShellExecute = false;
process.Start();
process.WaitForExit();
}
}

但是,当我 try catch 输出数据并手动将它们写入控制台时,我失败了。根据其他帖子推荐的解决方案是这样的,但它不起作用:

static void Main(string[] args)
{
using (Process process = new Process())
{
process.StartInfo.FileName = "python.exe";
process.StartInfo.Arguments = "test.py";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
}

process.StandardOutput.ReadToEnd() 以阻塞模式工作,等待进程退出并一次性返回全部输出。实时输出捕获到底有什么问题,我该如何解决?

最佳答案

        using (var process = new Process())
{
process.StartInfo.FileName = @"python.exe";
process.StartInfo.Arguments = "-u test.py";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UseShellExecute = false;
process.Start();

while (!process.StandardOutput.EndOfStream)
{
string line = process.StandardOutput.ReadLine();
Console.WriteLine(line);
// do something with line
}
process.WaitForExit();
Console.Read();
}

关于C# 进程的实时标准输出/错误捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52292942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com