81
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonで print の出力結果を即時表示, 強制表示, フラッシュさせる(主にjupyter)

Last updated at Posted at 2016-04-17

背景

重い処理の進捗確認のため、処理の途中に挟んだprint文がその時点で出力されずに、
処理が終わってからまとめて出てくることがある。

処理速度やらの観点で言えばこの挙動は正しいかもしれないが、
即時出してもらいたいときに、これでは困る。。

##jupyterだけ?
下記の例文では、jupyter(IPython notebook)だと起きるので、バッファ等の設定によるかも。
コンソールだとflushが指定なくとも、逐次出力されていた。

#解決方法

  1. python3.3以降 :強制的にprintの出力を吐き出す:flushオプションを使う!
  2. 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)

81
54
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?