IPython(Jupyter)のline magicやcell magicの出力、その他諸々の出力を標準出力ではなく、オブジェクト(変数)に格納して後から加工したいということがたまにあるかもしれません。(例: 実行した関数の戻り値じゃなくて出力が欲しい)
あまり褒められたやり方ではないかもしれませんが、sys.stdout
の出力先を一時的にStringIO
へ飛ばしてしまう方法で実装してみます。
- 準備
try:
from io import StringIO # Python3
except:
from cStringIO import StringIO # Python2
import sys
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
-
%%time
の出力をハンドリング
%%time
for i in range(1000000):
i ** 2
- 後始末(必ずやるように!)
sys.stdout = old_stdout
- 結果を取得
clock_times = mystdout.getvalue()
print(clock_times)
CPU times: user 467 ms, sys: 0 ns, total: 467 ms
Wall time: 469 ms