如何避免Python fileinput库中的缓冲

如何避免Python fileinput库中的缓冲,python,readline,buffering,file-io,readlines,Python,Readline,Buffering,File Io,Readlines,我在这里看到过这个问题,但给出的答案在我的案例中不起作用,并且被标记为重复 sys.stdin=sys.stdin.detach() 这些都不适用于非stdin输入和用作流的其他文件 我深入研究了源代码()并发现,readlines(bufsize)在内部用于加载缓冲区。没有shell或其他管道恶作剧。对我有效的只是设置文件输入(bufsize=1)。file.readlines()文档确实声明“可选大小参数(如果给定)是返回行中总字节数的近似范围。”实际上,我每次只得到一行新行,而不必

我在这里看到过这个问题,但给出的答案在我的案例中不起作用,并且被标记为重复

  • sys.stdin=sys.stdin.detach()
  • 这些都不适用于非
    stdin
    输入和用作流的其他文件

我深入研究了源代码()并发现,
readlines(bufsize)
在内部用于加载缓冲区。没有shell或其他管道恶作剧。

对我有效的只是设置
文件输入(bufsize=1)
file.readlines()
文档确实声明“可选大小参数(如果给定)是返回行中总字节数的近似范围。”实际上,我每次只得到一行新行,而不必填充缓冲区

with fileinput.input(bufsize=1) as f:
    for line in f:
        print("One line in, one line out!")

事实上,我认为您可能需要将python-u
。您想删除
stdin
上的任何底层Python和/或stdio缓冲区,并删除任何更高级别的行读取缓冲区,对吗?似乎只要
fileinput
使用
readlines(self.\u bufsize)
,这实际上是可以保证工作的。不幸的是,这本身并没有被证明是正确的,但如果你只关心CPython 3.2,你可以肯定它是正确的,而且它看起来很可能非常安全,所以如果这足够好,那就太好了。如果你通读了
IOBase.readlines
(和实现),它将调用
readline
,如果没有缓冲区或
peek
,它将一次调用
read
1个字节。因此,我认为这很容易,你应该接受你自己的答案。此外,你可能想提交一个文档错误,因为它根本没有提到
bufsize
的功能,并且语言引用应该有足够的信息来保证
bufsize=1
(与无缓冲
stdin
一起,当从
stdin
读取时)意味着无缓冲
fileinput
@abarnert哪里是提交python文档错误的最佳位置?我相信文档错误会转到同一个问题跟踪器()作为代码错误,尽管您可能想阅读以确保我记得正确。此外,如果您不确定某个东西是否是错误,最好先在邮件列表中列出它并获得更广泛的反馈。