2014-02-22 170 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工作,而這個固定。