我开发了一个Python脚本,可以连续执行多个任务(主要是连接服务器和检索信息)。
有很多步骤,对于每个步骤,我想显示一个点,以便用户知道有什么事情发生。
在每一步结束时,我会这样做:
print('.', end='')
在最后一步,我写道:
print('Done!')
它起作用,除了在执行最终打印之前没有显示任何内容,因此它有点违背其原始目的:)
基本上,屏幕上没有显示任何内容,在最后一刻,会弹出:
.......Done!
如何逐步强制Python在同一行上打印?
答案 0 :(得分:9)
默认情况下,stdout
是行缓冲的,这意味着在您写一个换行符之前,缓冲区不会被刷新。
每次打印'.'
时都会明确刷新缓冲区:
print('.', end='', flush=True)
在Python 3.3中添加了flush
关键字;对于旧版本,请使用sys.stdout.flush()
。
来自print()
function documentation:
输出是否缓冲通常由 file 决定,但如果 flush 关键字参数为true,则强制刷新流。
和sys.stdout
documentation(print()
函数的 file 参数的默认值):
交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样进行块缓冲。
答案 1 :(得分:2)
您可以直接写入stdout(无缓冲):
,而不是使用printimport sys
import time
for i in range (10):
time.sleep (0.5)
sys.stdout.write('.')
print 'Done!'
答案 2 :(得分:0)
对于python 2.7.3你可以留下一个尾随的逗号,告诉空闲在打印语句后不插入一行,例如
print "hello",
print "world"
将返回
>>> hello world