Первое, что нужно попробовать: используйте аргумент bufsize
для Popen и установите для него 0
:
subprocess.Popen(args, bufsize=0, ...)
К сожалению, будет ли это работать, также зависит от того, как подпроцесс сбрасывает свой вывод, и я полагаю, что вы не контролируете это.
На некоторых платформах, когда данные, записанные в stdout
, сбрасываются, на самом деле изменяется в зависимости от того, обнаруживает ли базовая библиотека ввода / вывода интерактивный терминал или канал. Поэтому, хотя вы можете подумать, что данные там ожидают чтения - потому что именно так они работают в окне терминала - они могут быть буферизованы строкой, когда вы запускаете ту же программу, что и подпроцесс из другого в Python.
Добавлено: Я только что понял, что в любом случае bufsize=0
по умолчанию. Гайки.