полностью поцесс "ping ya.ru". И только после этого мы видим ответ. А можно как то перехватывать не дожидаясь окончания процесса?
во-первых этот код говно, потому что shell=True. во-вторых ты же сам написал читать из stdout пока не закроется пайп.
Что перехватывать? У тебя дальнейший код сразу же требует результат работы процесса
1. убрать shell=True и передавать аргументы в виде списка как все нормальные люди. 2. можешь читать например построчно, но это не самый оптимальный вариант. 3. можешь сделать пайп неблокирующим и ловить события на нем при помощи select
видимо я слишком тупой. 3-ий пункт я не понял. Получается нельзя считать что то из процесса, пока он работает? тоесть если я запущу subprocess.Popen("ping -t ya.ru", stdout=subprocess.PIPE). Пока я не сделаю .kill() или .terminate() я не смогу посмотреть, что там пишет процесс.
считать можно, что мешает? я написал как это сделать.
возможно ты ожидаешь что увидишь вывод команды сразу, но это так не работает в общем случае. читай как работает буферизация ввода-вывода.
.wait() ожидает завершение работы процесса. А если процесс не завершается никогда?
import subprocess p = subprocess.Popen(["ping", "-c", "20", "8.8.8.8"], stdout=subprocess.PIPE, encoding='utf-8') for line in p.stdout: print('>>>', line) p.wait()
Обсуждают сегодня