Python wx (Python Card) протоколирование вывода подпроцесса в окно

StackOverflow https://stackoverflow.com/questions/1200610

  •  05-07-2019
  •  | 
  •  

Вопрос

Есть такие Похожие вопросы на этот вопрос, но я хотел бы увидеть уточненный ответ.Я создаю простой графический интерфейс с помощью PythonCard для завершения процесса командной строки.В частности, это оболочка для ряда задач ANT и других пользовательских операций, поэтому ее могут использовать не разработчики.

Я бы хотел перенаправить выходные данные подпроцесса в текстовую область в окне.Похоже, что способ сделать это - использовать subprocess.Popen(command, stdout=subprocess.PIPE) и загрузите выходные данные в переменную.

Вопрос в том, как мне в режиме реального времени обновлять окно с помощью выходных данных подпроцесса?Любые намеки будут приветствоваться

Спасибо

Это было полезно?

Решение

Практически каждый подпроцесс, который вы можете обернуть, будет буферизовать свои выходные данные, если только вам не удастся обмануть его, заставив поверить, что он действительно подключен к терминалу - а подпроцесс не может этого сделать.Скорее, загляните в перспективный (хорошо работает на любой платформе, которая позволяет вам использовать псевдотерминал, то есть на любой платформе, кроме Microsoft Windows;в Windows вы могли бы попробовать мы ожидаем но у меня нет опыта работы с последним).

Эти модули предоставляют вам выходные данные подпроцесса, как только они созданы, и стремятся обмануть модуль, заставив его выдавать эти выходные данные как можно скорее и без буферизации, поэтому они должны упростить вам получение этих выходных данных в режиме реального времени и добавление их в текстовое поле, которое вы хотите постоянно обновлять.

Другие советы

Я тоже искал решение для этого.Оказывается, решение удивительно простое:

proc = подпроцесс.Popen("любая программа", cwd= "каталог запуска", shell= True, стандартный вывод = подпроцесс.КАНАЛ, stderr=подпроцесс.СТАНДАРТНЫЙ ВЫВОД )
пока это Правда:
txt = proc.стандартный вывод.строка чтения()
если не txt:перерыв
txt=txt.заменить(" ", " ").заменить(" ", " ").заменить("\\","\")
self.компоненты.taStdout.Текст приложения (txt)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top