Во-первых: вы не должны пытаться прочитать одну строку из процесса python, а вместо этого использовать событие OutputDataReceived
, которое запускается, когда процесс записывает новые данные.
Second: поскольку выходные данные буферизуются, вы, вероятно, захотите сбросить их после записи в процессе Python.
Итак, вот простой сценарий Python, который продолжает запись в стандартный вывод (обратите внимание, как вызывается stdout.flush
):
import random
import time
import sys
while True:
rand = random.randint(1, 10)
time.sleep(1)
print rand
sys.stdout.flush()
if rand in (9, 10):
break
А вот простая форма, которая читает вывод этого самого сценария:
var f = new Form();
var t = new TextBox();
t.Dock = DockStyle.Fill;
t.Multiline = true;
f.Controls.Add(t);
f.Load += (s, e) => {
Process process = new Process();
process.StartInfo.FileName = "python";
process.StartInfo.Arguments = @"d:\script.py";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += (s2, e2) => {
t.Text += e2.Data + Environment.NewLine;
};
process.Start();
process.BeginOutputReadLine();
};
f.ShowDialog();