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

Why is it important to flush characters stored in buffer?

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

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

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

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

但我看不出它的确切用途。不使用flush以后会面临什么问题?我知道已经有一个关于它的线程,但我无法真正思考如何使我的代码受益,因为即使没有刷新它也能正常工作。

通常,终端是行缓冲的,所以如果 print 的输出不包含换行符,在换行符 发出之前,您将看不到任何内容,或者当程序结束并且 stdout 作为关闭过程的一部分被刷新时。在这种情况下,您需要将 flush=True arg 添加到 print 调用中。您也可以显式调用 sys.stdout.flush(),但让 print 处理它更方便(也稍微快一些)。在 Python 2 中,您别无选择,只能调用 sys.stdout.flush().

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

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