python 標準出力のフラッシュ sys.stdout.flush

プログラムが出力したが,OSによってバッファリングされコンソールには実際には出力されてないものをフラッシュ(flush)させる関数.

  • pythonは,標準出力が改行されるタイミングで自動でフラッシュ(flush)させるようになってる.(ただし,パイプで別のプロセスにつながっている場合、バッファリングされる)

よって,

  • 改行をさせない標準出力であるsys.stdout.write()を使用
  • 関数が呼ばれるごとに標準出力されて欲しい

ときはsys.stdout.flush()でflushさせる必要がある.

サンプル

for i in range(10):
    sys.stdout.write(".")
    sys.stdout.flush()
    time.sleep(1)

時間にともなって出力したい時,flushしないとforがすべて終わってプログラムが終わってからすべて出力されることになる.

参考

https://hydrocul.github.io/wiki/programming_languages_diff/io/flush.html