我希望我的python程序能够在不打印换行符的情况下不断更新下载状态,并发现我可以使用\ r如下所示。
print('Download status: '+str(download), end='\r')
现在我还读到我还应该包括flush = true
..., end='\r' flush=true)
但我无法确切地看到它的目的。如果我不使用同花,我将来会遇到什么问题?我知道已经有一个关于它的线索,但我无法真正地了解我如何使我的代码受益,因为即使没有刷新它也能正常工作。
答案 0 :(得分:1)
通常,终端是行缓冲的,因此如果print
的输出不包含换行符,则在发出换行符 或程序结束时,您将看不到任何内容并且stdout
作为结束过程的一部分被刷新。在这种情况下,您需要将flush=True
arg添加到print
来电。您也可以明确地调用sys.stdout.flush()
,但让print
处理它会更方便(也更快)。在Python 2中,除了调用sys.stdout.flush()
之外别无选择。
但是,在Python 3中,如果输出中有print
(回车),\r
函数会为您执行缓冲区刷新。所以在这种情况下,你不必担心潮红。
OTOH,请注意某些IDE /终端可能不支持此行为,您需要使用flush=True
或sys.stdout.flush()
。就此而言,使用\r
和end=''
进行打印时,某些IDE甚至可能无法正常运行,即使您明确刷新,例如Spyder。