Python で argparse を使ってサブコマンドを実装する
Python3 で標準ライブラリの argparse を使うことで「サブコマンドを理解出来るコマンド」を実装することが出来ます。 今回はサンプルスクリプトと実行例をメモしておきます。
サンプルスクリプト
サンプルスクリプトは以下の通りです。 ArgumentParser に対して add_subparsers() を呼び出し、サブコマンドを登録します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | #!/usr/bin/env python
# coding: utf-8
import argparse
def command_aaa(args):
if args.xxx == False:
print("Hello, aaa!")
else:
print("Hello, xxx!")
def command_bbb(args):
if args.yyy == False:
print("Hello, bbb!")
else:
print("Hello, yyy!")
def command_help(args):
print(parser.parse_args([args.command, "--help"]))
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_aaa = subparsers.add_parser("aaa", help="Command AAA")
parser_aaa.add_argument("-x", "--xxx", action="store_true", help="Option XXX")
parser_aaa.set_defaults(handler=command_aaa)
parser_bbb = subparsers.add_parser("bbb", help="Command BBB")
parser_bbb.add_argument("-y", "--yyy", action="store_true", help="Option YYY")
parser_bbb.set_defaults(handler=command_bbb)
parser_help = subparsers.add_parser("help", help="Help")
parser_help.add_argument("command", help="Command help")
parser_help.set_defaults(handler=command_help)
args = parser.parse_args()
if hasattr(args, "handler"):
args.handler(args)
else:
parser.print_help()
|
実行例
実行例を羅列すると、以下の通りです。
| # ./sample.py aaa
Hello, aaa!
|
| # ./sample.py aaa -x
Hello, xxx!
|
| # ./sample.py bbb
Hello, bbb!
|
| # ./sample.py bbb -y
Hello, yyy!
|
| # ./sample.py help
usage: sample.py help [-h] command
sample.py help: error: the following arguments are required: command
|
| # ./sample.py
usage: sample.py [-h] {aaa,bbb,help} ...
positional arguments:
{aaa,bbb,help}
aaa Command AAA
bbb Command BBB
help Help
optional arguments:
-h, --help show this help message and exit
|
| # ./sample.py help aaa
usage: sample.py aaa [-h] [-x]
optional arguments:
-h, --help show this help message and exit
-x, --xxx Option XXX
|
| # ./sample.py help bbb
usage: sample.py bbb [-h] [-y]
optional arguments:
-h, --help show this help message and exit
-y, --yyy Option YYY
|