61 件 見つかりました。
ipythonは便利だ。pdbコマンドをトグルしておくとキャッチしてない例外発生時に自動的にそこに飛んでデバッガも起動してくれる。
従って、予期せぬ例外発生時には即座に対応できるし、また、怪しい箇所に適当に例外を投げるコードを入れておけば、そこからデバッガを開始できる。以下にもその旨解説されている。http://wiki.slash-reader.com/sonota--memo/ipython_
さて任意の関数の実行時にデバッガを起動したい場合どうするか。直前に述べたように、適当なコードをあらかじめ埋めておくのがひとつの方法。でもこれに以下の不満を抱くため、代替について調べた。
・コード埋める作業が面倒
・一時的な作業のためにソースファイルに手を入れたくない
runcallを使えばいけるようだ。
aはとあるクラス、fugaはそのクラスのメソッドとすれば、以下でデバッガが起動する。
In [xx]: import pdb In [xx]: pdb.runcall(a.fuga)引数を渡す場合は以下の様にする。
pdb.runcall(a.fuga, s1='foo', s2='bar')さてこのpdbはpythonのデバッガだが、これに比べ、上で述べたipythonで起動してくれるデバッガは、色付けなんかをしてくれて圧倒的に見易い。こちらを使いたい場合は以下の様にする。(引数の文字列"Linux"で色使いを指定している。これが無いと色はつかない)
In [xx]: import IPython In [xx]: p = IPython.Debugger.Pdb('Linux') In [xx]: p.runcall(a.fuga, s1='foo', s2='bar')
例えば以下のようにすれば、呼んだ関数が列挙される。
for record in inspect.stack(): print record[3],
MoinMoinを触ってみた。1.8.5。いい感じ。
ロクにマニュアルも見ていないが、身勝手な不満:
(1)添付ファイルへのリンクがファイルと直接繋がっていない(その添付ファイルにまつわるページに行く)
(2)添付ファイルリストが名前順であり、日付順にできない。
(1)
この不満はviewメソッドの振舞にある:getメソッドが私の望む動作である。
同様に考える人は多いようだが、設計上の一貫性から、設定で変更というわけにもいかぬようだ。
[Moin-user] Changing default behavior on downloads.
なので無理矢理変える方法を考える。
viewメソッドで、action/AttachFile.py中の、_do_viewが呼ばれる。よってここで、getメソッドの中身である_do_getを呼んでしまうのがひとつのテ。
attachment書式にviewメソッドを割当てているのはformatter/text_html.py 中 attachment_linkなので、これをgetにする方が素直な方法だろう。
(2)
action/AttachFile.py 中 _build_filelist をいじる必要がある。ここに添付ファイル名がfilesとなるリストに格納されており、この順に(ブラウザ上に見える)添付ファイルリストが作られているようだ。なんで、その処理の前に日付でソートしてしまえばよい。例えば14行目あたり、"if files:"以降に下記を入れる。
d = {} for file in files: fullpath = os.path.join(attach_dir, file).encode(config.charset) st = os.stat(fullpath) d[file] = request.user.getFormattedDateTime(st.st_mtime) d = sorted(d.items(), key=lambda (k, v): (v, k)) files = map(lambda t:t[0], d)
[2007-01-31-01]に「javascriptによるPDFリンク制御は上書きのみ」などと書いたが、やってみたらできた。また、[2007-01-08-01]にCOMからのリンク作成は無理っぽいなどと書いたが、これもjavascriptを経由しできた。顛末をメモする。WinXP SP3 Acrobat 9.1.3 pro
まずは結論。以下のスクリプトが動いた。
python(PyWin32):
import win32com.client import winerror win32com.client.dynamic.ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL) # omajinai doc = win32com.client.Dispatch("AcroExch.App").GetActiveDoc().GetPDDoc() jso = doc.GetJSObject() # <= this requires omajinai link = jso.addLink(0, (70,70,225,50)) link.borderWidth = 3 link.borderColor = (u'RGB', 0, 0, 255) link.setAction("this.pageNum = 2")
var linkRect = [70,70,225,50]; var link1= this.addLink(0, linkRect); link1.borderWidth = 3; link1.borderColor = color.blue; link1.setAction("this.pageNum = 2")
revtexとbibtex使用時、referenceで5人以上の著者に対しet al.で省略したいと思った。
こんな機械的な操作は当然便利な方法が用意されているものと思ったが、どうやらそうではない。
http://authors.aps.org/revtex4/revtex4_faq.html#b9
At the request of the editors, the truncation only happens when there are 10 or more authors. You will need to edit the .bbl file manually.
というわけでpythonで書いてみた。出力されたbblを直接いじっているだけ。元のファイルは".orig"を付与し保存する。
fname = 'del.bbl' maxlen = 5 import re, os output = '' fnameorig = fname + '.orig' if os.access(fnameorig, os.F_OK): s = open(fnameorig).read() else: s = open(fname).read() open(fnameorig, 'w').write(s) head, sep, body = s.partition(r'\bibitem') output += head reg = re.compile(r'(\\bibitem.+?)\n\n', re.DOTALL) reg_bibitem = re.compile(r'(.+?)((?: *?\\bibinfo{author}.+?(?=\\bibinfo))+)(.+)', re.DOTALL | re.MULTILINE) for r in reg.finditer(sep + body): bibitembody = r.group(1) rr = reg_bibitem.search(bibitembody) if rr: output += rr.group(1) # head authors = rr.group(2) a = r'\bibinfo{author}' authorlist = authors.split(a)[1:] # the first element is blank if len(authorlist)>maxlen: output += (a + authorlist[0]).strip().replace(',', ' \\textit{et al.},\n') else: output += authors output += rr.group(3) # tail output += '\n\n' else: print '***** error ! *****\n', bibitembody output += '\\end{thebibliography}\n' open(fname, 'w').write(output)
windowsでipythonをもっと便利に使うためのメモ。
inspectやhelpの際にテキストがダーっと出てくるが、進むのみで戻れない。戻って見るためにどうすればよいか?
まずページャを導入する。デフォルトでは"a very limited builtin pager"が使われるため「戻る」動作ができないのであった。
ページャとしてlessを使うなら、環境変数 PAGER に less を、LESS に -r を指定すればよい。勿論lessはパスの通った所におく。MOSTなるページャもあるようだが使ったことはない。
これで「戻る」ができるようになるが、手元のlessバイナリでは-rオプションをつけても制御文字がちゃんと表示されなかった。色をつけようとしている部分にゴミが一杯ついて正視に耐えない。どうやらこれは既知の問題のようだ。でもcygwinのlessを試したところ、ちゃんと色がついた。2行にまたがる長い行があって"/"で検索した時なんかに画面が崩れたりしたが、再描画のrコマンドなどで回避する(lessの問題か、cygwinの問題か、windowsの問題かは知らない)。
コンソールもコマンドプロンプトから変えた方が使い勝手が良い。Consoleなるコマンドプロンプト代替コンソールがあったので2.00b141を使ってみたが、結構良さそうだった。コピーのための領域選択はデフォルトでShiftを押しながら左クリックであることに注意。
実行時間の長いpythonスクリプトなどを走らすと、コマンドプロンプト画面がずっと出てる。これが沢山あると、どれがどれだかわからなくなる。なので自分の好きなようにタイトルバーの文字列を設定したい。
以下のようにすればOK。(タイトルはhogeになる)
title hoge
import os, time time.sleep(1) os.system('title hoge') time.sleep(1)
import win32con, win32api win32api.PostMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND, win32con.SC_MONITORPOWER, 1)
WindowsプログラミングにはIronPythonが便利そうだなと思っていたが、同じ開発元からIronPython StudioなるIDEまでリリースされていたことを知り、導入に踏み切った。その際のメモ。
pre-requistiesを見てみるとVisual Studio 2008 Shell Isolated Mode Redistributable packageがあったのでダウンロードしインストール。場所としてC:\VS 2008 Shell Redist以下を指定し、しばらく待ったら終わった。だがその後に C:\VS 2008 Shell Redist\Isolated Mode\vs_shell_isolated.enu.exe を実行せねばインストールが真に終わらない(*)とのことで、実行した。.NET Framework 3.5のインストールの後にVS2008Shellなんちゃらのインストールが始まった。
(*) pre-requistiesのページに以下の記述があった。
After you run the Install for the MS VS 2008 Shell Isolated Mode Redistributable, you must then go to the folder (in my case: C:\VS 2008 Shell Redist\Isolated Mode) and click on: "vsshellisolated_enu.exe" to actually install the redistributable runtime.
のちに IronPythonStudioIsolated.zip をダウンロードしインストールした。スタートメニューにIronPython Studioが登場したので実行したが、ちゃんと起動できた。
Windows Applicationの新規プロジェクトを立ち上げ、Formに適当に貼り付けて実行する(この操作はVS 2003と同様)と、ちゃんと実行できた。すごい。コントロールをダブルクリックするとちゃんとpythonソースのイベントハンドラの所に飛ぶ。これはもっとすごい。
作成したプロジェクトのbinディレクトリを見ると実行ファイルができていた。同じくIronMath.dll、IronPython.dllもあり、これら3つを別のPCに持っていって、プログラムを実行できるのを確認した。うまくいきすぎて拍子抜けした。プロジェクトのプロパティで"Target Platform"が選べて、ここの値の.NETが入っているPCなら動くのだろうと理解。
できれば実行ファイルでなくスクリプトのままで動かしたいところだが、ひと手間かかるようだ。Visual Studio 2005 for IronPythonで作ったコードを ipy.exe 単体で動かせるようにするには? - ふにゃるん
起動はとても遅い。FormにボタンとNumericUpDownを配置し、メッセージボックスを出すだけのReleaseビルド実行ファイルの起動にかかる時間は、Athlon 64 X2 3800+ 2GB RAMマシンで2秒ほど、Celeron 2.5GHz 2.5GB RAMマシンに至っては15秒前後かかる。起動後の動作に特に不自然な印象は無い。
だけどまあ素早い開発ができそうなのは良い。PyWin32も結構便利な環境だが、IDEがあるあたりが良い。個人的には、NumericUpDownが簡単に使えるのが動機の大きい割合を占める。
参考:IronPythonプログラミングの始め方 − @IT