Необходимость избежать взаимоблокировки подпроцесса без связи

Мне нужно выполнить команду, которая дает много вывода и требует много времени для выполнения (> 30 минут). Я думал использовать для этого subprocess.Popen. Мне нужно записать вывод команды, поэтому я передаю PIPE в stdout и stderr.

Проблема взаимоблокировки при использовании Popen.wait () хорошо задокументирована на многих форумах, поэтому Popen.communicate () - это предлагаемый способ избежать тупиковой ситуации. Проблема с этим решением заключается в том, что общение () блокируется до завершения команды. Мне нужно распечатать все, что приходит на stdout, пока команда выполняется. Если через 20 минут нет вывода, выполнение скрипта будет остановлено.

Вот некоторые ограничения, которые мне нужно соблюдать:

  • Моя версия Python - 2.4.2, и я не могу выполнить обновление.
  • Если решение по-прежнему заключается в использовании подпроцесса, мне нужно передать subprocess.PIPE всем дескрипторам std, чтобы избежать этой ошибки: http://bugs.python.org/issue1124861

Есть способ сделать это?

22
задан rypel 22 May 2013 в 15:45
поделиться