接下来的缓冲区在哪里…以及如何将其关闭?
我正在像这样的python程序中写出到stdout:
for line in sys.stdin: print line
这里有一些缓冲:
tail -f data.txt | grep -e APL | python -u Interpret.py
我尝试了以下方法来摆脱可能的缓冲…但是没有运气:
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命令那样缓冲。
那么,如何关闭缓冲?解答:事实证明,管道的两端都有缓冲。
我认为问题在于grep缓冲其输出。当您管道操作时,它就是这样做的tail -f | grep ... | some_other_prog。要grep每行刷新一次,请使用以下--line-buffered选项:
grep
tail -f | grep ... | some_other_prog
--line-buffered
% tail -f data.txt | grep -e APL --line-buffered | test.py APL APL APL
在哪里test.py:
test.py
import sys for line in sys.stdin: print(line)
(已在gnome-terminal的Linux上进行了测试。)