Я хотел бы написать простое приложение, которое запускает несколько программ и отображает их вывод в нескольких терминальных (стилевых) окнах. Кроме того, я хочу иметь возможность читать stdout / stderr этих процессов и искать ключевые слова в выводе.
Я пытался реализовать это двумя способами в python, первый из которых использовал subprocess.Popen, а второй - vte (python-vte).
Я только заставил Попена работать с опросами. Я должен постоянно проверять, есть ли у процессов данные для чтения, читать данные, а затем отправлять их в мой TextArea. Вместо этого было рекомендовано использовать gobject.io_add_watch (), но всякий раз, когда я пытаюсь, чтобы моя программа зависала при втором вызове io_add_watch - все равно, что он может обрабатывать только один дескриптор файла одновременно.
vte прекрасно работает, но я не нашел надежного способа получения выходных данных. Вы можете получить обратный вызов, когда курсор переместится, а затем очистить экран w / get_text (), но я уже сталкивался со случаями, когда эти программы, которые я просматриваю, генерируют непристойное отношение к tty за один раз, а затем оно исчезает с экрана. Похоже, что нет обратного вызова, содержащего новый текст, добавляемый в окно.
Есть идеи?