optparse_liteというコマンドラインインターフェース作成支援スクリプトを書いてみた
こんばんは。地震がまだ続いて油断ができない状態ですね。
このあいだ、コマンドラインインターフェース作成を支援するoptparseというモジュールをみつけまして、早速使ってみたんですがインターフェースのオプション(【pythoon ほにゃらら.py -x test】の -xの部分)作成を支援するだけらしく、肝心の「どういうふうに動かすか」を指定できないみたいなんです。
なので、「どういう風に動かすか」も指定できて、それで且つオプションもパースできる。そういうスクリプトを書いてみました。
ダウンロードはgithubとpypiの二つからできます。
githubのほうがオススメ。更新頻度高いから。
- github -> https://github.com/alice-himmel/Optparse_lite
- pypi -> http://pypi.python.org/pypi/optparse_lite
- easy_install optparse_lite でもOK
目次
使い方
- モジュールをimport。
- オプションパーサークラスを定義。このとき、usageとversion番号を引数にいれてください。
- このとき、usageに%progを入れるとファイル名に変換されます。
- オプションを追加させる。まず最初にオプション名を書いて、そのあとは number_of_keyとdescとactionを入力してください。
- number_of_keyはスクリプトが取得したい引数の数を入力してください。(ほにゃらら.py -x text text だったら 2)
- descはそのオプションの説明。
- actionはFanctionタイプです。パーサークラスを定義する前に、このオプションで動かしたい関数を書いていてください。その関数名を入力してください。ちなみに、関数の引数は絶対リストにしてください。
- runparserメソッドを動かして完了。
import optparse_lite
parser=optparse_lite.OptionParse(usage="%prog [option]", version="1.0")
def printout(list): print list[0] parser.add_option("-p","--print",number_of_key=1,desc="printout",action=printout)
parser.runparser()
これで、動きます。
サンプル
#!/usr/bin/python #coding: utf-8 import optparse_lite def printstring(locallist): print locallist[0] def calc(locallist): l = locallist print int(l[0]) + int(l[1]) usage = "usage: %prog [option]" version = "1.0.0" parser = optparse_lite.OptionParse(usage, version) parser.add_option( "-p", "--print", number_of_key=1, desc="Print String.", action=printstring ) parser.add_option( "-c", "--calc", "---calc-nums", number_of_key=2, desc="Calcuation your num. ex):-c 2 3 -> 5", action=calc ) parser.runparser()
まだ不十分なところ
- まだヘルプ表示がうまくいってない。インデントもぐちゃぐちゃだし、気持ち悪い状態。
- 関数への引数の渡し方がリストオンリーなのが不十分。まぁ普通にリストから引数をとってきてくれればいいんだけど…
こんなかんじです。
オプションをばしばし使ってコマンドラインインターフェースを実装したい方はぜひ使ってみてくださいね!
PS
MOONGIFT(http://www.moongift.jp/)さんにて、ShareSRCの記事が書かれていました。自分が作ったアプリケーションが記事になるなんて初めてで、とても嬉しいです。
MOONGIFTさん、ありがとうございました。
ユーザ登録不要で使えるソースコード共有システム「ShareSRC」
http://www.moongift.jp/r/2011/03/20110320/
ShareSRC - ソースコード共有サイト
http://sharesrc.appspot.com