У меня есть следующий скрипт Python:
import time
for x in range(10):
print(x)
time.sleep(0.05)
Я хочу запустить этот скрипт и перехватить его вывод во время его работы.
Я использовал следующий код C #, но он не печатает ни одного числа, пока не завершит цикл.
private void DoScriptTest()
{
ProcessStartInfo start = new ProcessStartInfo();
string cmd = @"c:\flowers\count.py";
start.FileName = @"C:\Users\pubud\AppData\Local\Programs\Python\Python36\python.exe";
start.Arguments = string.Format("{0}", cmd);
start.UseShellExecute = false;// Do not use OS shell
start.CreateNoWindow = true; // We don't need new window
start.RedirectStandardOutput = true;// Any output, generated by application will be redirected back
start.RedirectStandardError = true; // Any error in standard output will be redirected back (for example exceptions)
Process process = new Process();
process.StartInfo = start;
process.EnableRaisingEvents = true;
process.OutputDataReceived += ProcessOutputHandler;
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
process.WaitForExit();
}
private void ProcessOutputHandler(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
try {
TxtPrompt.Invoke((MethodInvoker)delegate {
TxtPrompt.AppendText(e.Data);
TxtPrompt.Refresh();
});
}
catch
{ }
}
Я не уверен, почему ProcessOutputHandler НЕ вызывается в во время работы скрипта. Как я мог получить этот вывод? (числа из скрипта Python в реальном времени)