python コンソール 上書き出力

f:id:TheTree:20170219185811g:plain

次の行を出力する前に行頭にカーソルを戻して行を削除してあげれば良い.(行頭に戻してあげれば上書きするので文字数が少なくならないなら行の削除はいらない).

pythonだと

sys.stdout.write('\r\033[K' + 'なにか')
sys.stdout.flush()
  • printは自動改行なので使用しない.
  • sys.stdout.flush()は以下

thetree.hatenadiary.jp

  • リダイレクトとかを考えるとstdoutでなくstderrを使うのが良い.エスケープシーケンスはターミナルを制御するものなのでファイルに出力されると制御文字やらただの文字だらけになる.

サンプル

import sys, time
for i in range(100):
    sys.stdout.write("\r%d" % i)
    sys.stdout.flush()
    time.sleep(0.1)

参考

http://www.yunabe.jp/docs/terminal_progress_bar.html