为什么print参数flush默认为False?

时间:2019-01-26 11:25:18

标签: python output-buffering

我正在使用print记录我的python脚本的执行情况。

我到处都使用flush = True,因为否则打印语句有时不会出现在放置它们的位置。

我想知道为什么默认值为flush = False。谁能解释?

谢谢!

1 个答案:

答案 0 :(得分:1)

通过默认情况下不强制使用flush,您可以将该决定留给要写入的基础对象。对于sys.stdin / stderr,这将默认为行缓冲的_io.TextIOWrapper,这通常是您在交互式控制台上期望和想要的。当您将输出交换为文件时,默认情况下不强制每次打印/写入都使用flush。相反,在每次打印后强制flush会覆盖基础对象的缓冲/刷新行为。

例如,当您通过tee, process' own stdout`运行脚本时,明显的警告是没有直接写入终端。


我还仔细研究了一下是否有关于动机的文字证据。在issue 13761中记录了添加flush关键字。显然,关于True的默认设置为stdout的建议早在2012年就提出了,并被驳回(请参见讨论的底部)。我猜这是可以应用Python的禅宗的地方:“特殊情况还不足以打破规则。” (没有特殊待遇,只是因为我们写的是sys.stdout 。;)

在邮件列表中还有一个link,BDFL自己声明:

  

我可以在print()中添加一个新的关键字参数   3.3强制刷新,只要默认关闭即可。