C # WPF Процесс получения StandardOutput прерывистый

c# python process

64 просмотра

1 ответ

125 Репутация автора

У меня есть процесс Python, запущенный в моем файле C # для WPF:

        ProcessStartInfo StartInfo = new ProcessStartInfo(@"python ", location);
        StartInfo.UseShellExecute = false;
        StartInfo.CreateNoWindow = true;
        StartInfo.RedirectStandardOutput = true;
        StartInfo.RedirectStandardError = true;
        try
        {
            p.StartInfo = StartInfo;
            p.EnableRaisingEvents = true;
            p.OutputDataReceived += new DataReceivedEventHandler(OnDataReceived);
            p.ErrorDataReceived += new DataReceivedEventHandler(OnDataReceived);
            p.Exited += new EventHandler(OnProcessExit);
            p.Start();
            p.BeginOutputReadLine();
            p.BeginErrorReadLine();
         }
        catch (Exception exc)
        {
            Console.Write(exc);
        }

и позже:

private void OnDataReceived(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            torOut = e.Data;
            Console.WriteLine(torOut);
        }
    }

Моя программа на Python печатает несколько сообщений в секунду. Когда я запускаю это, появляется только часть вывода; например, print "message"может вызываться 50 раз, и только после 50-го раза все 50 сообщений будут отображаться в виде пакета.

Есть ли проблема с моим подходом, или скорость чтения StandardOutput особенно медленная / прерывистая?

Автор: user1785715 Источник Размещён: 18.07.2016 02:54

Ответы (1)


0 плюса

125 Репутация автора

Решение

В случае, если у кого-то есть подобная проблема, я в конечном счете решил ее. Добавьте следующее после любого времени вывода:

import sys
sys.stdout.flush()
Автор: user1785715 Размещён: 30.07.2016 12:31
Вопросы из категории :
32x32