Я работаю над запуском простого скрипта python через мою программу C# через класс Process. Вот код, я использую на самом деле запустить скрипт:Объект процесса, выполняющий скрипт Python, не перенаправляет вывод успешно
public PythonScript (string filePathDir, string args, Action<string> write)
{
this.filePathDir = filePathDir;
this.args = args;
this.write = write;
script_thread = new Thread (Run);
script_thread.Start();
}
private void Run()
{
process = new ProcessStartInfo();
process.Arguments = args;
process.FileName = filePathDir;
process.UseShellExecute = false;
process.RedirectStandardOutput = true;
p = Process.Start (process); // p is declared as "Process p;"
while (true) {
write ("running");
string foo = p.StandardOutput.ReadLine();
write ("running1");
write (foo);
}
}
Путь я на самом деле создать свой объект PythonScript является:
PythonScript py = new PythonScript("python3", "HeartAPI.py", Write)
где записи мой метод вывода (для печать информации). Форматирование для этого происходит от here. (обратите внимание: я пишу python3 вместо python.exe или что-то еще, потому что я работаю в среде KUbuntu)
Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю свой скрипт (это базовый api), api доступен и доступен, но каждый раз, когда у моего скрипта python есть вызов print()
, ничего не выводится через мою функцию Write
. Тем не менее, я знаю, что это не так, как я передаю метод, так как звонок write("running");
работает, и он отображается.
Кто-нибудь есть идеи, почему мой поток вывода python НЕ проходит до моего метода write
? Я не смог найти другие примеры в Интернете с этой проблемой, поэтому любая помощь будет оценена!
EDIT: уточнить. Мой скрипт python запускается и успешно завершает свои операции. Тем не менее, вывод этого сценария НЕ будет перенаправлен соответствующим образом, насколько я могу судить. Метод Write(string)
, передаваемый в объект PythonScript, работает корректно, так как команда write("running");
отлично работает и отображается так, как должна. Почему вывод сценария Python не перенаправляется в мой метод write()
?
EDIT 2: В ответ на ответ, который я пробовал, я добавил script_thread.Join()
звонок под остальную часть кода в моем PythonScript
конструкторе. Вот обновленный код:
public PythonScript (string filePathDir, string args, Action<string> write)
{
this.filePathDir = filePathDir;
this.args = args;
this.write = write;
script_thread = new Thread (Run);
script_thread.Start();
script_thread.Join();
Console.WriteLine ("JOINED");
}
Я также добавил вызов для вывода на консоль действительно указывают, когда поток присоединяется, который никогда не получает выход. При попытке этого кода окно моего графического интерфейса никогда не появляется. Однако у меня есть система протоколирования в месте, которое было написано, и это был выход, который должен был пойти в мой GUI консоли:
running
11:11:44- Closing down Heart...
11:11:44- Goodbye.
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
11:11:44-
11:11:44- running
11:11:44- running1
Закрытие сердце ... вызывается, когда графический интерфейс велено закрыть. Поэтому я не совсем уверен, что здесь происходит, но это то, что было сделано с добавлением вызова Join()
.
Это фактически исправило мою проблему, спасибо тонну !!!! – PulsePanda