2013-07-12 92 views
5

我有一個非常簡單的應用:爲什麼我的python輸出延遲到程序結束?

import sys 
from time import sleep 

for i in range(3): 
    sys.stdout.write('.') 
    sleep(1) 

print('Welcome!') 

我希望它打印出每秒(3次)點,之後它應該顯示「歡迎光臨!」。不幸的是,它只需等待三秒鐘,然後一次打印出所有內容。我在運行普通Python 2.7的mac上,我不知道爲什麼這個代碼的行爲如此。有什麼建議麼?

+0

可能重複http://stackoverflow.com/questions/107705/ python-output-buffering) – Bruce

+0

查看[此問題](http://stackoverflow.com/questions/107705/python-output-buffering)瞭解更多詳細信息(以及更高級的方式來執行您想要的操作)。 – abarnert

回答

8

這是因爲sys.stdout被緩衝。使用flush

import sys 
from time import sleep 

for i in range(3): 
    sys.stdout.write('.') 
    sys.stdout.flush() 
    sleep(1) 

print('Welcome!') 
0

您應該使用printlogger

如果您想要您期望的行爲,您需要使用sys.flush來強制輸出。

1

stdout是一個緩衝流。緩衝區在到達換行符時隱式刷新。

如果要刷新緩衝區,而無需編寫一個換行符,你必須通過調用sys.stdout.flush()

明確地這樣做另一種選擇是寫stderr,這不是緩衝。

1

你可以調用python與-u使stdin,stdout和stderr完全無緩衝。這將使您不必手動刷新它們。

在Unix上,打電話給你的腳本一樣python -u myscript.py

或者你可以把它的家當:#!/usr/bin/python -u

[Python的輸出緩衝(的
相關問題