Я использую Python subprocess.communicate()
считать stdout из процесса, который работает приблизительно в течение минуты.
Как я могу распечатать каждую строку того процесса stdout
способом потоковой передачи, так, чтобы я видел вывод, поскольку он сгенерирован, но все еще блок на процессе, завершающемся перед продолжением?
subprocess.communicate()
кажется, дает весь вывод сразу.
Обратите внимание, я думаю J.F. Метод Себастьяна (ниже) лучше.
Вот простой пример (без проверки на наличие ошибок):
import subprocess
proc = subprocess.Popen('ls',
shell=True,
stdout=subprocess.PIPE,
)
while proc.poll() is None:
output = proc.stdout.readline()
print output,
Если ls
завершается слишком быстро, то цикл while может завершиться до того, как вы прочитаете все данные.
Вы можете получить остаток в stdout следующим образом:
output = proc.communicate()[0]
print output,
Если вам нужен неблокирующий подход, не используйте process.communicate ()
. Если вы установите subprocess.Popen ()
аргумент stdout
на PIPE
, вы можете прочитать из process.stdout
и проверить, все еще работает с использованием process.poll ()
.