Я работаю над программным обеспечением 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
.