python3で標準出力を取得

kazuph.hateblo.jp

kusanohitoshi.blogspot.com

出力する系のメソッドをテストするときに毎回ググるのでメモ。

from io import StringIO
tmp_buffer = StringIO()
sys.stdout = tmp_buffer

# outの中に出力されるはずだったやつが入る
out = tmp_buffer.getvalue()

# sys.stdoutの行き先を標準出力に戻す
sys.stdout = sys.__stdout__

なんかググると上の方の検索結果に、sys.stdoutを一旦ファイル出力してそのファイルの中身を拾って標準出力をゲットする、ていうやり方が出てくるけど、なんかすごく直感的に嫌な感じがしてしまうのでこっちのやり方のほうが好き。