我希望我的 python 程序不断更新下载状态而不打印换行符,并发现我可以按如下方式使用\r。
print('Download status: '+str(download), end='\r')
现在我还读到我还应该包括flush = true
..., end='\r' flush=true)
但我无法确切看出它的目的。如果我不使用flush,将来会遇到什么问题?我知道已经有一个关于它的线程,但我无法真正思考如何使我的代码受益,因为即使没有刷新它也可以正常工作。
最佳答案
通常,终端是行缓冲的,因此,如果 print
的输出不包含换行符,则在发出换行符之前,您将看不到任何内容,或者当程序结束,并且作为关闭过程的一部分,stdout
被刷新。在这种情况下,您需要将 flush=True
参数添加到 print
调用中。您还可以显式调用 sys.stdout.flush()
,但让 print
处理它更方便(也更快)。在 Python 2 中,您别无选择,只能调用 sys.stdout.flush()。
但是,在 Python 3 中,如果输出中存在 \r
(回车符),print
函数会为您执行缓冲区刷新。所以在这种情况下,你不需要担心冲洗。
OTOH,请注意,某些 IDE/终端可能不支持此行为,您需要使用 flush=True
或 sys.stdout.flush()
跟他们。就此而言,即使您显式刷新,某些 IDE 在使用 \r
和 end=''
打印时甚至可能无法正确运行,例如 Spyder 。
关于python - 为什么刷新缓冲区中存储的字符很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219900/