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