読者です 読者をやめる 読者になる 読者になる

Pythonの標準出力のバッファサイズを0にする方法

Pythonにはprogressbarというその名の通りプログレスバーを表示するためにモジュールがあるけど、そんな大それたものじゃなくて、ほんの少しだけでいいからプログレスバーっぽいものを表示したかったから、Pythonで標準出力のバッファサイズを0にする方法を調べた*1

# 標準出力を開き直す
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

これで一文字ずつ標準出力されるようになる。この状態で試しに

import time
print 'processing',
for i in xrange(5):
    time.sleep(1)
    print '.',

ってやると、processingって表示された後に少しずつ...が追加されていく。
Pythonの起動オプションで-uを付けるのでもいけるってことを思い出したのは、調べた後だった。

*1:デフォルトでは一行バッファになってる