2012-10-06 114 views
6

下面的代碼應該在1到10之間打印,間隔爲1秒,但是它在實際打印任何內容之前等待10秒,然後將其全部打印出來立刻。我怎樣才能緩衝輸出?Python sys.stdout.flush()不起作用

import sys 
import time 
for count in range(10) : 
    sys.stdout.write(str(count)) 
    sys.stdout.flush() 
    time.sleep(1) 

回答

0

Python 2.7,3.2和3.3都不允許在您的寫入調用中使用關鍵字參數。那是正確的代碼嗎?打印功能當然允許結束關鍵字,不應與寫入混淆。寫入不添加換行符。

刪除'結束'關鍵字參數和測試顯示代碼工作正常。

+1

感謝您的快速響應......這是一個錯誤......即使沒有結束=「」代碼仍然暫停之前,一次打印所有內容 – user1724351

+0

我完全和完全無法重現該問題。你可以通過測試其他人來縮小到特定的Python版本嗎?什麼OS? – whardier

+0

使用python 3.2.3的Mac OSX。它只是不緩衝 – user1724351

1

發現問題

import sys 
import time 
for count in range(10) : 
    sys.stdout.write("\b%s" % count) 
    sys.stdout.flush() 
    time.sleep(.1) 

不知道爲什麼蟒蛇很奇怪這樣的,但顯然它接受這一點。你的代碼應該工作得很好,但我猜python只是不喜歡你。

+1

我使用python 3.3 btw,所以它可能在其他版本中有所不同。進行了更多的研究,發現print「end =」\ r「」中的參數將清除緩衝區,因此不需要導入sys,並且如果循環打印任何內容,它將替換您剛剛打印的任何內容。 這給輸出一個非常酷的外觀 – Alexander