我在这里看到过这个问题,但给出的答案在我的案例中不起作用,并且被标记为重复。
-
python -u
does not work forstdin
in Python 3. sys.stdin = sys.stdin.detach()
抛出一个ValueError: underlying buffer has been detached
。- 这些都不适用于非
stdin
输入和其他用作流的文件。 - Adding a hook does not work:
FileInput(openhook=hook_nobuf)
and usingopen(buffering=0)
in the hook.
我深入研究了源代码 ( /usr/lib/python3.2/fileinput.py
),发现 readlines(bufsize)
在内部用于加载缓冲区。没有外壳或其他管道恶作剧。
最佳答案
对我有用的是简单地设置 FileInput(bufsize=1)
。 file.readlines()
文档确实声明“可选的大小参数(如果给定的话)是返回行中总字节数的近似界限。”实际上,我每次都得到一个新行,而不必填充缓冲区。
with fileinput.input(bufsize=1) as f:
for line in f:
print("One line in, one line out!")
关于python - 如何避免在 Python 文件输入库中缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15012340/