为什么刷新存储在缓冲区中的字符很重要?

时间:2018-01-12 05:09:51

标签: python buffer newline flush

我希望我的python程序能够在不打印换行符的情况下不断更新下载状态,并发现我可以使用\ r如下所示。

print('Download status: '+str(download), end='\r')

现在我还读到我还应该包括flush = true

..., end='\r' flush=true)

但我无法确切地看到它的目的。如果我不使用同花,我将来会遇到什么问题?我知道已经有一个关于它的线索,但我无法真正地了解我如何使我的代码受益,因为即使没有刷新它也能正常工作。

1 个答案:

答案 0 :(得分:1)

通常,终端是行缓冲的,因此如果print的输出不包含换行符,则在发出换行符 或程序结束时,您将看不到任何内容并且stdout作为结束过程的一部分被刷新。在这种情况下,您需要将flush=True arg添加到print来电。您也可以明确地调用sys.stdout.flush(),但让print处理它会更方便(也更快)。在Python 2中,除了调用sys.stdout.flush()之外别无选择。

但是,在Python 3中,如果输出中有print(回车),\r函数会为您执行缓冲区刷新。所以在这种情况下,你不必担心潮红。

OTOH,请注意某些IDE /终端可能不支持此行为,您需要使用flush=Truesys.stdout.flush()。就此而言,使用\rend=''进行打印时,某些IDE甚至可能无法正常运行,即使您明确刷新,例如Spyder