IPythonのlogの話
IPythonにはマジックコマンドという便利な機能があって
%コマンド
でログをとってくれたり、 pdb(デバックツール)を起動してくれたり、いろいろ嬉しいのですが
ログの %logon %logoff %logstart %logstate
が、どうしてもうまく使いこなせない。 しかし、対話式で試したことは後で確認したいことも多いので
#save_ipythonlog.py
import os
def savelog(globals, dir=r"c:\your\ipythonlogdirctory", filename=None):
'''
usage :
from save_ipythonlog import savelog
savelog(globals())
'''
if not filename:
import datetime
filename = "ipythonlog_%s.txt" % datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
In = globals.get("In")
Out = globals.get("Out")
wf = open(os.path.join(dir, filename), "w")
for n, i in enumerate(In):
wf.write(str(i))
if Out.get(n):
wf.write("#%s\n" % str(Out.get(n)).replace("\n", "\n#"))
wf.write("\n")
wf.close()
のようなコードを作ってIPython上で
from save_ipythonlog import savelog
savelog(globals())
とやって保存しています。
これで決めたディレクトリに ipythonlog_20080131_201054.txt のような名前で以下のように保存されます。
_ip.magic("ed save_ipythonlog.py")
from bbs.models import *
print Entry.objects.all()
Entry.objects.all()
#[<Entry: dai
#
#
#>, <Entry: だよね>, <Entry: ねね
#
#>, <Entry: だだf
#
#>, <Entry: だふぁだf>, <Entry: だふぁふぁ>, <Entry: 1
#
#>, <Entry: 2
#
#>, <Entry: ああい
#だだ
#
#だd>]
savelog(globals())
Outは変数などの中身を記録するだけなので、上の例のようにprint文などは記録されません。
Outの部分はコメントアウトしてるので余計な部分を消せばそのままPythonのコードに使えます。
普通のログ機能を使いこなせればいいのだろうけど、現状はこれで間に合ってます。
perm link: /blog/entry/ipythonlog/