2014-02-22 171 views
2

我想要做的是每次打印某些内容时延迟0.5秒。但是我遇到的问题是,它滞后了一段时间,然后一次打印出来。打印之间的延迟

import time 

x = [(0, 1), (2, 3), (4, 5), (6, 7), (8, 7)] 

for i in x: 
    print(i) 
    time.sleep(0.5) 

这是什么应该做的:

(0, 1) 
wait 0.5 seconds 
(2, 3) 
wait 0.5 seconds 
(4, 5) 
etc 

但与我的问题是,它不打印的第一个,等待0.5 并打印了下,什么矿山所做的就是等待了这么久然后一次打印全部, 我想知道什么是解决这个问题的方法。

+2

这工作正常我的机器上,蟒蛇2.7.6。这是你现在正在做的吗? –

+0

是的,它也适用于我。嗯.... – ForgetfulFellow

+0

也适用于python 3.3。你的规格是什么? –

回答

5

一些系统缓冲,直到一个换行符后加入sys.stdout.flush()。这可能是你所看到的。

yonili的答案应该可以做到。在每个打印语句后添加sys.stdout.flush()

编辑:

对于它的价值,将代码粘贴到IPython中我的Linux机器上给出了下面的输出中,印有各条线的半秒的延迟。

(0, 1) 
(2, 3) 
(4, 5) 
(6, 7) 
(8, 7) 
+1

感谢这似乎解决了这个问题。但这是一个奇怪的问题,我用空闲的方式尝试了同样的事情并且工作。我想我使用的IDE太奇怪了。 – Sc4r

1

看来您使用的是Python 3,所以您实际上可以在没有任何其他语句的情况下执行此操作。只需添加flush=True到打印语句的参数,即:

print(i, flush=True) 

我有同样的问题,得到一个加载条在Python工作,而这个固定。