Python で argparse を使ってサブコマンドを実装する

Python3 で標準ライブラリの argparse を使うことで「サブコマンドを理解出来るコマンド」を実装することが出来ます。 今回はサンプルスクリプトと実行例をメモしておきます。

サンプルスクリプト

サンプルスクリプトは以下の通りです。 ArgumentParser に対して add_subparsers() を呼び出し、サブコマンドを登録します。

#!/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

コメント

タイトルとURLをコピーしました