У меня есть случай использования, когда мне нужно запустить процесс (веб-сервер IIS Express), подождать, пока он напечатает определенную строку, чтобы убедиться, что он полностью инициализирован, а затем прекратить чтение его вывода и запустить другую операцию блокировки:
proc = subprocess.Popen('iisexpress.exe /path:<bla bla bla>', shell=True, stdout=subprocess.PIPE);
# .... <read some output>
os.system('nunit <bla bla bla>') # This takes a long time
Проблема в том, что я прекращаю читать канал вывода, но дочерний процесс не прекращает запись в него.В конце концов канал заполняется, и дочерний процесс останавливается при попытке записи в него.
Я думаю о 2 подходах - либо запустить новый поток в моем скрипте Python, чтобы прочитать и удалить строки из дочернего процесса, либонайти способ перенаправить канал на /dev/null
после того, как я закончу читать с него.
Какой из подходов мне выбрать?