IPython shell で tee を実現する

TL;DR 🎄

ウェブサイトへのアウトプットを軌道に乗せるため、アドベントカレンダーをやってみることにします。 というわけでこれはアドベントカレンダー1日目の記事です。

Linux では標準出力をターミナルに表示しつつファイルにも保存したい時、以下のように tee コマンドを使いますが、これと同様の結果を IPython shell 上でも実現したい時の方法をまとめておきます。

<some command> | tee result.log

IPython.utils.io.Tee

IPython パッケージの中に、そのものずばりの Tee クラスが用意されています。 以下のように記録したいコードの前後で以下のように記録することで、print 関数等の標準出力が同時にファイルにも保存されます。

from IPython.utils.io import Tee

f = Tee('result.log')
... # some script
f.close()

もちろん、パッケージ開発の際は、ユーザがこのような対応を取らなくて良いように、Python のロギング機能を使うのが良いように思います。

References