C # Process не может получить вывод из Python Process, потому что sys.stdout.isatty () сообщает False - PullRequest
0 голосов
/ 06 марта 2019

Я работаю над программным обеспечением C #, которое запускает программу Python CLI с использованием класса Process и перенаправляет stdout и stderr приложения Python во внутренний обработчик.

Данные выводятся на стандартный вывод с использованием sys.stdout.write(), и приложение C # хоста получает данные, как и положено.

Проблема заключается в том, что некоторые выходные данные в программе Python выводятся только в том случае, если sys.stdout.isatty() возвращает значение True, но поскольку к процессу не подключена консоль / tty, функция возвращает значение False.

Есть ли способ запустить программу Python таким образом, чтобы функция isatty() возвращала True, чтобы я мог получать и обрабатывать весь вывод (stdout и stderr)?

Это код запуска процесса:

Process proc = new Process();

// FileName points to a 'compiled' Python exe program
proc.StartInfo.FileName = Constants.StreamLinkBinary;
proc.StartInfo.Arguments = " ... program arguments ...";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;

proc.OutputDataReceived += (sender, args) => Console.WriteLine(args.Data);
proc.ErrorDataReceived += (sender, args) => Console.WriteLine(args.Data);
proc.EnableRaisingEvents = true;
proc.Start();

proc.BeginOutputReadLine();
proc.BeginErrorReadLine();

РЕДАКТИРОВАТЬ: Я забыл упомянуть, что для моего проекта требуется, чтобы при запуске процесса не появлялось новое окно консоли, то есть я не могу изменить значения UseShellExecute или CreateNoWindow.

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