Где буфер в этом следующем... и как его отключить?
Я пишу в stdout в python-программе, например:
for line in sys.stdin:
print line
Здесь происходит буферизация:
tail -f data.txt | grep -e APL | python -u Interpret.py
Я попробовал следующее, чтобы избавиться от возможной буферизации... без везения:
- как указано выше, используя флаг -u с вызовом python
- вызов sys.stdout.flush() после каждого вызова sys.stdout.write() ... все они создают буферизованный поток с python, который ждет что-то вроде минуты, чтобы распечатать первые несколько строк.
-
использовалась следующая измененная команда:
stdbuf -o0 tail -f data.txt | stdbuf -o0 -i0 grep -e APL | stdbuf -i0 -o0 python -u Interpret.py
Чтобы оценить мои ожидания, я попытался:
tail -f data.txt | grep -e APL
Это создает устойчивый поток строк... это, безусловно, не так буферизуется, как команда python.
Итак, как отключить буферизацию? ОТВЕТ: Оказывается, на обоих концах трубы есть буферизация.