Я создал подпроцесс, используя subprocess.Popen(['myapp'], stdin=PIPE, stdout=PIPE, stderr=PIPE, bufsize=0)
, который выполняет C-программу, которая записывает в stdout
, используя, например, puts()
.
Проблема в том, что программа Python блокируется в p.stdout.read(1024)
,хотя подпроцесс начинается с puts("HelloWorld")
.Только после завершения подпроцесса вывод доступен на p.stdout
.Я подумал, что bufsize=0
будет означать, что каналы станут небуферизованными, так что выходные данные будут немедленно доступны для канала.
Я прочитал приведенный ниже вопрос, в котором говорится, что переводы строки должны вызывать сброс данных.Тем не менее, puts()
выводит новую строку, поэтому каналы не распознаются как интерактивное устройство?
Разница между put () и printf () в C при использовании sleep ()
Это потому, что put также выводит символ новой строки, который на устройствах, которые могут быть определены как интерактивные, вызывает сброс по умолчанию (для стандартного вывода) (a).
Есть идеи?