Python-мониторинг stderr и stdout подпроцесса

Я пытаюсь запустить программу (HandBreakCLI) в качестве подпроцесса или потока из python 2.7. Я дошел до его начала, но я не могу понять, как контролировать его stderr и stdout.

Программа выводит его статус (% done) и информацию о кодировке в stderr и stdout, соответственно. Я хотел бы иметь возможность периодически извлекать% из соответствующего потока.

Я попытался вызвать subprocess.Popen с stderr и stdout, установленными в PIPE, и используя subprocess.communicate, но он сидит и ждет, пока процесс не будет убит или не закончен, а затем получит результат. Не делает мне много хорошего.

У меня это работает и работает как поток, но, насколько я могу судить, мне все же придется в конечном итоге вызвать subprocess.Popen, чтобы выполнить программу и запустить ее в одну стену.

Правильно ли я это делаю? Какие у меня есть другие варианты или как это сделать, как описано?

One Solution collect form web for “Python-мониторинг stderr и stdout подпроцесса”

Я сделал то же самое с ffmpeg. Это урезанная версия соответствующих частей. bufsize=1 означает буферизацию строк и может не понадобиться.

 def Run(command): proc = subprocess.Popen(command, bufsize=1, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) return proc def Trace(proc): while proc.poll() is None: line = proc.stdout.readline() if line: # Process output here print 'Read line', line proc = Run([ handbrakePath ] + allOptions) Trace(proc) 

Редактировать 1: я заметил, что подпроцесс (ручной тормоз в этом случае) должен быть очищен после строк, чтобы использовать это (ffmpeg делает).

Редактирование 2: Некоторые быстрые тесты показывают, что bufsize=1 может и не понадобиться.

  • Объединить и синхронизировать stdout и stderr?
  • Установка правильной кодировки при отправке stdout в Python
  • Использовать Python для записи вывода CSV в STDOUT
  • Стандартная идиома Python для установки буфера sys.stdout в ноль не работает с Unicode
  • Python считывает из подпроцесса stdout и stderr отдельно при сохранении порядка
  • Отключить буферизацию вывода
  • перенаправить stdout в текстовый виджет tkinter
  • Python - разница между sys.stdout.write и печатью
  •  
    Interesting Posts for Van-Lav

    Устранение очистки нитей на парамико

    Почему моя функция «xmap» не быстрее, чем встроенная «карта»?

    Прямая загрузка в S3 с помощью Python / Boto / Django для создания политики

    Действительно ли симплексные матрицы медленны?

    Не удается загрузить страницу ASP.NET с помощью Python urllib2

    TensorFlow: параметры не обновляются при обучении

    Невозможно импортировать PyQt4.QtGui

    Содержание центральной таблицы python-docx

    Активировать учетную запись службы из GCloud

    Пользовательские пики PyCharm docstring (то есть для форматов google docstring или numpydoc)

    Включение отформатированного итерации как части большей форматированной строки

    Удалить лишнее пространство из значений в списке

    Чрезвычайно длительное время ожидания при загрузке ресурса REST из angularjs

    Как найти общую папку данных приложения Windows с помощью Python?

    Каков правильный способ заставить приложение PyQt покинуть консоль (Ctrl-C)?

    Python - лучший язык программирования в мире.