背景
重い処理の進捗確認のため、処理の途中に挟んだprint文がその時点で出力されずに、
処理が終わってからまとめて出てくることがある。
処理速度やらの観点で言えばこの挙動は正しいかもしれないが、
即時出してもらいたいときに、これでは困る。。
##jupyterだけ?
下記の例文では、jupyter(IPython notebook)だと起きるので、バッファ等の設定によるかも。
コンソールだとflushが指定なくとも、逐次出力されていた。
#解決方法
- python3.3以降 :強制的にprintの出力を吐き出す:flushオプションを使う!
- python3.3より前と2.X:print後に sys.stdout.flush() を使う。(動作未確認)
##print関数のオプションにflush=True をつける!(python3.3以降)
python3.3以降
print("", flush=True)
##print後に sys.stdout.flush() を使う(動作未確認)
python3.3より前(下記コードはpython2系)
import sys
print ""
sys.stdout.flush()
例: python3.4とjupyterにて
jupyterで確認(コンソールではflush無しでも逐次出力された・・・)
import time
time.sleep(1)
print("processing A...")# ここでは表示されない・・・
time.sleep(1)
print("finish!")# 上のprintとまとめて出力される。。。
# flush を使うと・・・
time.sleep(1)
print("processing B(flush=True)", flush=True)# すぐに表示される!
time.sleep(1)
print("finish!", flush=True)