一步一步地在同一行打印

时间:2014-06-17 06:46:20

标签: python python-3.x

我开发了一个Python脚本,可以连续执行多个任务(主要是连接服务器和检索信息)。

有很多步骤,对于每个步骤,我想显示一个点,以便用户知道有什么事情发生。

在每一步结束时,我会这样做:

print('.', end='')

在最后一步,我写道:

print('Done!')

它起作用,除了在执行最终打印之前没有显示任何内容,因此它有点违背其原始目的:)

基本上,屏幕上没有显示任何内容,在最后一刻,会弹出:

.......Done!

如何逐步强制Python在同一行上打印?

3 个答案:

答案 0 :(得分:9)

默认情况下,stdout是行缓冲的,这意味着在您写一个换行符之前,缓冲区不会被刷新。

每次打印'.'时都会明确刷新缓冲区:

print('.', end='', flush=True)

在Python 3.3中添加了flush关键字;对于旧版本,请使用sys.stdout.flush()

来自print() function documentation

  

输出是否缓冲通常由 file 决定,但如果 flush 关键字参数为true,则强制刷新流。

sys.stdout documentationprint()函数的 file 参数的默认值):

  

交互式时,标准流是行缓冲的。否则,它们像常规文本文件一样进行块缓冲。

答案 1 :(得分:2)

您可以直接写入stdout(无缓冲):

,而不是使用print
import 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