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

标签 python buffer newline flush

我希望我的 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=Truesys.stdout.flush()跟他们。就此而言,即使您显式刷新,某些 IDE 在使用 \rend='' 打印时甚至可能无法正确运行,例如 Spyder

关于python - 为什么刷新缓冲区中存储的字符很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219900/

相关文章:

python - 如何从 Python 中的 2 个词典创建字典?

c# - 在 C# 中将指针用作外部函数的缓冲区

unix - 删除 FASTA 文件中的换行符

python - Pandas 合并数据框

python - 禁用 argparse 和 optparse 的唯一前缀匹配

c++ - 如何使用 boost 将流放入缓冲区

C if 语句无法检测新行

php - PHP 是否具有检测其运行的操作系统的功能?

Python - 多处理 - CPU 的更多工作。

c++ - 如何在缓冲区中读取和写入多个对象(或任何数据)?