Как захватить вывод скрипта Python в C #, поскольку он печатает текст во время работы? - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующий скрипт 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 в реальном времени)

...