2017-11-25 9 views
0
import time 

for i in range(100): 
    print('*',end='') 
    time.sleep(0.1) 

なぜこのコードが進捗状況を表示していないのですか? 期待される出力は、進行状況 '***************'を表示することでした。プログレスバーが機能していませんか?

+0

あなたは何をしていますか?わたしにはできる。 https://repl.it/repls/TreasuredPerfumedIndianpangolin – user2896976

+0

@ user2896976しばらく待ってから '*'を100回印刷すると、プログレスバーのように印刷されません。 – user8751232

+0

どのようにスクリプトを実行していますか? – user2896976

答えて

0

標準出力がバッファされます。それぞれprintの後にsys.stdout.flush()への呼び出しでフラッシュすることができます。または、明示的なフラッシュを実行する代わりに、flush=Trueを印刷コマンドに追加することができます。

print('*', end='', flush=True) 
+0

何がフラッシュで、なぜ使用され、どのようにsys.stdout.flushを教えてください。私は、内部的にこのコードの中でハッキングが起こっていることをあなたに言いたいのですか? – user8751232

+0

@ user8751232、stdoutは 'print'出力がデフォルトで行われる場所です。パフォーマンスを向上させるために、stdoutは通常バッファされます。通常、stdoutはバッファされた行です。つまり、行全体が印刷可能になるまで、実際には何も印刷されません。 Flushは、バッファから蓄積されたすべてのものをプッシュすることを意味します。したがって、 'sys.stdout.flush()'はすべてをバッファから画面上にプッシュします。 'flush = True'も同じことをします。また、アプリケーション全体のバッファリングをなくすこともできますが、通常の状況下ではバッファリングをしたくない場合があります。 –

関連する問題