optparse_liteというコマンドラインインターフェース作成支援スクリプトを書いてみた

こんばんは。地震がまだ続いて油断ができない状態ですね。


このあいだ、コマンドラインインターフェース作成を支援するoptparseというモジュールをみつけまして、早速使ってみたんですがインターフェースのオプション(【pythoon ほにゃらら.py -x test】の -xの部分)作成を支援するだけらしく、肝心の「どういうふうに動かすか」を指定できないみたいなんです。
なので、「どういう風に動かすか」も指定できて、それで且つオプションもパースできる。そういうスクリプトを書いてみました。


ダウンロードはgithubpypiの二つからできます。
githubのほうがオススメ。更新頻度高いから。




目次




使い方

  1. モジュールをimport。
    • import optparse_lite
      

  2. オプションパーサークラスを定義。このとき、usageとversion番号を引数にいれてください。

    • このとき、usageに%progを入れるとファイル名に変換されます。
    • parser=optparse_lite.OptionParse(usage="%prog [option]", version="1.0")
      

  3. オプションを追加させる。まず最初にオプション名を書いて、そのあとは number_of_keydescactionを入力してください。

    • number_of_keyはスクリプトが取得したい引数の数を入力してください。(ほにゃらら.py -x text text だったら 2)
    • descはそのオプションの説明。
    • actionはFanctionタイプです。パーサークラスを定義する前に、このオプションで動かしたい関数を書いていてください。その関数名を入力してください。ちなみに、関数の引数は絶対リストにしてください。
    • def printout(list):
      	print list[0]
      parser.add_option("-p","--print",number_of_key=1,desc="printout",action=printout)
      

  4. runparserメソッドを動かして完了。
  5. 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