Я занимаюсь разработкой приложения на C #, и мне нужно запустить процесс внешней консоли (например, сценарий python) и получить выходные данные сценария в режиме реального времени. Сценарий Python выглядит примерно так:
import time
while 1:
print("Hi Foo!")
time.sleep(.3)
Следующий код C # выводит вывод скрипта python на консоль C # в режиме реального времени:
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();
}
}
Однако, когда я пытаюсь записать выходные данные и вручную записать их в консоль, у меня не получается. Рекомендуемое решение по другим постам примерно такое, но оно не работает:
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()
работает в режиме блокировки, ожидая завершения процесса, и возвращает весь вывод одновременно. Что именно является проблемой с захватом вывода в реальном времени и как я могу это исправить?