www.flickr.com
|
2007年03月25日
ipythonのバッチスクリプト
ipythonはバージョン0.7.2から、ipythonのプロンプトに入力していた 命令を並べたファイルをスクリプトとして実行できるようになった。 サフィックスを.ipyとして、:
ipython hoge.ipy
として実行できる。又shebang(#!/usr/bin/ipython)を加え、実行権限を与えれば:
./hoge.ipy
としても実行できる。
あまり意味の無い例:
1: #!/usr/bin/ipython 2: import sys 3: l=sys.argv[2:] 4: dl={} 5: for i in l: 6: t=!file $i 7: dl[i]=t[0] 8: 9: dl|ibrowse
1、2行目:通常のpythonの様にsys.argvを読むことで、 バッチスクリプトに引数を渡せる。
外部コマンドの実行はipythonのプロンプトの様に、頭に!を付けるだけで良い。 6行目の様に代入すると、tは標準出力の結果が入ったリストになる。
8行目:インデントのある構文の後は1行開ける。
9行目:ディクショナリをipipeの機能で閲覧する。 ipipeのimportはipythonの設定で行っている。~/.ipython/ipy_user_conf.py のmain()関数に:
ip.ex("from ipipe import *")
を加える。
上のスクリプトを:
./hoge.ipy /usr/doc/ipython-0.7.2/*
として実行した 結果 。
ただし0.7.2では実行後に必ずipythonプロンプトに落ちてしまい、あまり使い勝手が よくない。この点は開発元のレポジトリでは 修正されている ようなので、 時期バージョンでは解決しそう。…0.7.3で修正済。
外部コマンドのバッチ処理を同じpythonで書くなら、subprocessを 多用するよりもipythonで書いた方が楽だと思う。 だたし実行後の立ち上がりや処理速度は遅く感じる。