Запуск скрипта Python на C # и непрерывный вывод - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь запустить скрипт на Python из C # и хочу получать вывод построчно, а не в конце.Я чувствую, что упускаю что-то важное, но не знаю что.Это то, что я до сих пор:

static void Main(string[] args)
{
    var cmd = "C:/Users/user/Documents/script.py";
    var process = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "C:/Users/user/AppData/Local/Programs/Python/Python36/python.exe",
            Arguments = cmd,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            CreateNoWindow = true
        },
        EnableRaisingEvents = true
    };
    process.ErrorDataReceived += Process_OutputDataReceived;
    process.OutputDataReceived += Process_OutputDataReceived;

    process.Start();
    process.BeginErrorReadLine();
    process.BeginOutputReadLine();
    process.WaitForExit();
    Console.Read();
}

static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Console.WriteLine(e.Data);
}

И код питона:

import time

for i in range(5):
    print("Hello World " + str(i))
    time.sleep(1)

1 Ответ

0 голосов
/ 19 ноября 2018

измените свой код Python на следующее:

import time
import sys
for i in range(5):
    print("Hello World " + str(i))
    sys.stdout.flush()
    time.sleep(1)

или просто отредактируйте ваш код на c # и используйте ключ -u:

var cmd = "-u C:/Users/user/Documents/script.py";

Когда стандартный вывод перенаправлялся, событие в C # не вызывалось при записи строки на консоли, потому что не было вызовов stdout.flush;

Помещение оператора stdout.flush () после каждого оператора печати приводило к тому, что события запускались, как и должно быть, и C # теперь захватывает вывод по мере его поступления.

Или вы можете просто использовать ключ -u.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...