2014-06-17 64 views
3

后面的步骤我开发了一个Python脚本,它可以连续执行多个任务(主要连接到服务器和检索信息)。打印在同一行上,步骤

有许多步骤,并为他们每个我想显示一个点,以便用户知道有什么事情发生。

在每一步结束后,我做的:

print('.', end='') 

,并在最后一步,我写:

print('Done!') 

它的工作原理,但直到执行最后打印不显示任何内容,所以它有点击败其原来的目的:)

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

.......Done! 

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

回答

9

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

刷新缓冲区,明确每次打印'.'

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

在Python 3.3中加入的flush关键词;对于旧版本,请使用sys.stdout.flush()

print() function documentation

无论输出进行缓冲通常由文件确定的,但是如果冲洗关键字参数为真时,该流被强制地刷新。

并从sys.stdout documentation(对于文件参数的print()功能的默认值):

当互动,标准流行缓冲。否则,它们像常规文本文件一样被块缓冲。

+0

谢谢!我正在查看3.0文档,没有看到Flush选项。在[最新版本[(https://docs.python.org/3/library/functions.html#print)它在这里:) – Pierre

2

而不是使用打印的,你可以直接写入到标准输出,(无缓冲):

import sys 
import time 

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

谢谢!我不知道缓冲/无缓冲的事情。 – Pierre

0

为Python 2.7.3,你可以留下后面的逗号,它告诉闲置未插入行后该语句印刷例如

print "hello", 
print "world" 

将返回

>>> hello world