Мне нужна команда execute, которая производит много выходных данных и занимает много времени для выполнения (> 30 минут). Я думал об использовании подпроцесса. Открыть, чтобы сделать это. Мне нужно захватить выходные данные команды, поэтому я передаю PIPE в stdout и stderr.
Проблема взаимоблокировки при использовании Popen.wait () хорошо документирована на многих форумах, поэтому Popen.communicate () - это предложенный способ избежать тупика. Проблема с этим решением состоит в том, что Communication () блокирует, пока команда не будет завершена. Мне нужно распечатать все, что поступает на стандартный вывод во время выполнения команды. Если через 20 минут ничего не выводится, выполнение скрипта будет прервано.
Вот некоторые ограничения, которые я должен соблюдать:
- Моя версия Python - 2.4.2, и я не могу обновить.
- Если решение по-прежнему заключается в использовании подпроцесса, мне нужно передать subprocess.PIPE во все дескрипторы std, чтобы избежать этой ошибки: http://bugs.python.org/issue1124861
Есть ли способ сделать это?