在同一行上逐步打印输出

3

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

这里有很多步骤,每个步骤都需要显示一个点,以便用户知道正在进行某些操作。

在每个步骤结束时,我会执行以下操作:

print('.', end='')

在最后一步,我会写下以下内容:
print('Done!')

它能够正常工作,但是直到最后一个打印语句被执行之前,屏幕上什么也没有显示出来,这有点违背了它的原始目的 :)

基本上,在屏幕上什么都没有显示,只有在最后一刻才会弹出以下内容:

.......Done!

我该如何让Python在每一步后都在同一行上打印?
3个回答

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

每次打印 '.' 时都要显式地刷新缓冲区:

print('.', end='', flush=True)
flush 关键字在 Python 3.3 中添加;对于旧版本,请使用 sys.stdout.flush()。根据 print() 函数文档,输出是否被缓冲通常由文件决定,但如果 flush 关键字参数为 true,则强制刷新流。另外,根据 sys.stdout 文档print() 函数的 file 参数的默认值):当交互时,标准流是行缓冲的。否则,它们像普通文本文件一样是块缓冲的。

谢谢!我看了3.0文档,没有看到Flush选项。在最新版本中已经有了 :) - Pierre

2

你可以直接写入到标准输出(不带缓冲),而不是使用print:

import sys
import time

for i in range (10):
    time.sleep (0.5)
    sys.stdout.write('.')
print 'Done!'

谢谢!我不知道缓冲/非缓冲的事情。 - Pierre

0

对于Python 2.7.3,您可以留下尾随逗号来告诉IDLE在语句打印之后不插入新行,例如

print "hello",
print "world"

会返回

>>> hello world

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接