Python3 と tee コマンドを組み合わせたときにハマった

print() で標準出力にメッセージを出力する Python スクリプトがあったとする。 その出力を画面で見ながらファイルにも書き出したいというときには、tee コマンドを使う。

$ ./example.py | tee example.log
...

しかしながら、スクリプトを実行中に画面には何も現れないということが起こりうる。 これは標準出力がバッファリングされるからで、この問題は以下を参照して解決した。

pythonで標準出力のバッファリングを無効にする - blog.mouten.info

-u オプションを使って、バッファリングを無効化すれば良い。 結局のところ、以下のような感じにすればよろしい。

$ python3 -u example.py | tee example.log
...