Я хочу запустить subprocess.Popen('echo 1; sleep 1; echo 1', shell=True, stdout=?)
так, чтобы вывод отображался (во время выполнения), а также я мог сохранить его в ТРУБЕ или в файл.
До сих пор я бегал с proc = subprocess.Popen('echo 1; sleep 1; echo 1', shell=True, stdout=PIPE, stderr=PIPE)
, давая мне второе требование, а затем я печатал бы результат out, err = proc.communicate()
, но использование communicate
- это блокировка, и поэтому, если Popen
занимает много времени, Я не могу показать вывод, и это неприемлемо.
Можно ли как-нибудь оставить поле stdout=
пустым (для включения вывода на консоль), а также скопировать вывод в ТРУБУ?
Обновление . Это не то же самое, что Python Popen: одновременная запись в стандартный вывод и файл журнала , потому что я хочу иметь возможность доступа к выводу результатов во время выполнения, и в предложенном решении предлагается доступ к proc. стандартный вывод, блокирующий до конца цикла.