可能重复:
设置sys.stdin的较小缓冲区大小?
我有一个使用fileinput
从标准输入或文件中读取数据的Python脚本(2.4 / 2.7)。 它易于使用,除了一种情况外都很好用:
tail -f log | filter.py
问题在于我的脚本会缓冲其输入,而(至少在这种情况下)我想立即看到其输出。这似乎源于fileinput使用readlines()
在执行任何操作之前获取其bufsize
大小的字节。我尝试过使用bufsize为1的选项,但似乎没有帮助(这让我有些惊讶)。我发现我可以编写像这样的代码来避免缓冲:
while 1:
line = sys.stdin.readline()
if not line: break
sys.stdout.write(line)
这种方法的问题在于我会失去fileinput功能(即它自动打开传递给程序的所有文件,如果没有,则使用标准输入,甚至可以自动解压缩输入文件)。
那么如何做到两全其美呢?理想情况下,我不需要显式地管理我的输入文件列表(包括解压缩),但在“流式”方式下使用时又不会延迟输入。