Моя программа управляет внешним приложением в Linux, передает входные команды по каналу в stdin внешних приложений и считывает результаты вывода по каналу из stdout внешних приложений.
Проблема в том, что записи в каналы буферизуются по блокам, а не по строкам, и поэтому возникают задержки, прежде чем мое приложение получит данные, выводимые внешним приложением. Внешнее приложение нельзя изменить, чтобы добавить явные вызовы fflush ().
Когда я устанавливаю внешнее приложение на / bin / cat -n (оно возвращает вход, с добавленными номерами строк), оно работает правильно, кажется, cat сбрасывает после каждой строки. Единственный способ принудительно сбросить внешнее приложение - это отправить ему команду exit ; как только он получает команду, он сбрасывается, и все ответы появляются на стандартном выводе непосредственно перед выходом.
Я почти уверен, что каналы Unix являются подходящим решением для такого межпроцессного взаимодействия (псевдосервер-клиент), но, возможно, я ошибаюсь.
(Я только что скопировал текст из аналогичного вопроса: Принудительно небуферизовать стандартный вывод другой программы с помощью Python )