Как получить результат процесса - PullRequest
0 голосов
/ 28 мая 2020

Мой C# код:

static string pyExe = "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python37_64\\python.exe";

var psi = new Process();

string name = "show_ing.py";
string script = "C:\\Users\\micosin\\source\\practiceDotNet\\python\\" + name;
C:\Users\micosin\source\practiceDotNet\python

psi.StartInfo.FileName = pyExe;
psi.StartInfo.Arguments = script;
psi.StartInfo.UseShellExecute = false;
psi.StartInfo.CreateNoWindow = false;
psi.StartInfo.RedirectStandardOutput = true;
psi.StartInfo.RedirectStandardError = true;
psi.StartInfo.StandardErrorEncoding = Encoding.UTF8;
psi.StartInfo.StandardOutputEncoding = Encoding.UTF8;
psi.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
psi.Start();

psi.BeginOutputReadLine();
psi.WaitForExit();

...

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

Python сценарий show_ing.py для создания тестового вывода:

# -*- encoding=utf-8 -*-

import sys
import time

print(sys.argv)
while True:
    print('PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP')
    time.sleep(1)

Я хочу получить вывод во время выполнения сценария (следовательно, бесконечное l oop). При тестировании я получаю вывод скрипта только в том случае, если он завершается (нет l oop).

1 Ответ

0 голосов
/ 11 июня 2020

Решение вопроса: получить новые концепции о буфере .

только для гриппа sh буферизации для вывода (используйте print ("Hello world!", Flush = True)) . процесс C# может получить результат

...