argparseモジュールでは、オプションの処理だけでなく、サブコマンドの処理もできる。
マニュアルはここ。
cf. http://docs.python.jp/2/library/argparse.html#id10
サンプル
次のサンプルは、foo と bar の2つのサブコマンドを持っている。
import argparse
def foo(args):
if args.upcase:
print 'FOO'
else:
print 'foo'
def bar(args):
for i in range(args.times):
print 'bar'
parser = argparse.ArgumentParser(description='Sub-command sample')
subparsers = parser.add_subparsers(help='sub-command help', title='subcommands')
parser_foo = subparsers.add_parser('foo', help='foo help')
parser_foo.add_argument('-u', '--upcase', action='store_true', help='upcase')
parser_foo.set_defaults(func=foo)
parser_bar = subparsers.add_parser('bar', help='bar help')
parser_bar.add_argument('-t', '--times', type=int, metavar='N', action='store',
default=1, help='repeat N times')
parser_bar.set_defaults(func=bar)
args = parser.parse_args()
args.func(args)
16行目でサブコマンドを振り分ける(らしき)オブジェクトを作り、18~20行目と22~25行目でそれぞれfooとbarの2つのサブコマンドを作っている。ここでのキモは20行目と25行目、set_defaultsでサブコマンドが選択されたときに実行すべき関数を登録しているところ。
そして、最後の行でその関数を実行している。
実行例
メインコマンドの–helpオプション:
^o^ > python subcommand.py --help
usage: subcommand.py [-h] {foo,bar} ...
Sub-command sample
optional arguments:
-h, --help show this help message and exit
subcommands:
{foo,bar} sub-command help
foo foo help
bar bar help
サブコマンド foo:
^o^ > python subcommand.py foo --help usage: subcommand.py foo [-h] [-u] optional arguments: -h, --help show this help message and exit -u, --upcase upcase ^o^ > python subcommand.py foo foo ^o^ > python subcommand.py foo --upcase FOO
サブコマンドのヘルプも自動的に作ってくれている。
サブコマンド bar:
^o^ > python subcommand.py bar bar ^o^ > python subcommand.py bar --times 3 bar bar bar