Я вижу ряд возможных проблем:
a) Дочерний процесс фактически никогда не сбрасывает свой вывод и, следовательно, никогда не отправляет свой вывод родительскому процессу.
b) Родительский процесс выполняетсяего read()
вызов до того, как дочерний процесс фактически отправил свой вывод (сбросил свой вывод).
c) Родительский процесс выполняет блокировку read()
, которая до EOF, что фактически означает, что он ожидает выхода дочернего процесса,Документы subprocess.Popen
должны указывать, может ли это быть так.
d) Вызов read()
родительского процесса ожидает поступления определенного количества байтов (например, 1024), прежде чем он вернется.
Вероятно, если родитель выполнит много вызовов read(1)
, и повторная сборка байтов по мере их поступления решит проблему.Или с помощью API связи более высокого уровня, например, используя дейтаграммы вместо анализа потоков байтов.