2010-12-16 8 views
11

私は、Python 3.1で簡単なプログラムを書いていたし、私はこのつまずい:のpython3スリープ()問題

私はそれが意図したとおりに動作IDLEでこれを実行する場合 - "Initializing."プリントして、2つのドット、それぞれの後に1を加算入力を待つ。

from time import sleep 

def initialize(): 
    print('Initializing.', end='') 
    sleep(1) 
    print(" .", end='') 
    sleep(1) 
    print(" .", end='') 
    input() 

initialize() 

問題は、私は、ファイルを実行するための.pyをダブルクリックしたとき、それは代わりにpythonw.exeのpython.exe上で実行され、そして奇妙なことが起こるということである:それは私を作るすなわち、すべてのsleep()回に参加します2秒間待ってから、文字列全体を一度にInitializing. . .に出力します。なぜこれが起こるのですか?それはターミナルで起こっていることを避ける方法はありますか?ウィンドウとLinuxの両方でIDLEを使用するとうまく動作します。

+2

をされて、書き込み後sys.stdout.flush()を追加する必要があります。一般に、 'end'を使用すると、あなたは何か起こっていてすぐに何かを書くことになります。 –

答えて

21

出力がバッファリングされているためです。

あなたはまだそれを `\のN 'を与えられていないので、それぞれが、私はそれがバッファリングだ理由を想像

+0

ありがとう、これで解決しました! – roddds

+1

そして、4年後、私は実際にこれを受け入れられた答えとして決して決して気づいていませんでした。 – roddds

+5

Python 3の 'print'関数を使うと、' flush'パラメータを使うこともできます。 'print("。 "、end = ''、flush = True)' –

5

違いは、stdoutが自動的にIDLEでフラッシュされるということです。効率を上げるために、プログラミング言語は画面に書き込む前に印刷呼び出しの束を節約することがありますが、これは処理が遅いことです。

は、ここであなたが必要な答えを持っている別の質問です: How to flush output of Python print?