argument2.py
#!/usr/bin/env python
# coding: utf-8
import argparse
# ---▽--- parser を作る ---▽---
parser = argparse.ArgumentParser()
# スイッチ (値なしオプション)
parser.add_argument('-v', help='verbose', action='store_true')
# 必須オプション
parser.add_argument('-x', '--sex', help='sex(required)', required=True)
# 任意オプション
parser.add_argument('-a', '--age', help='age')
# 複数の値付きオプション (* の代わりに数字を入れられるけど、普通は * だよね。0 or 1 は '?')
parser.add_argument('-f', '--family', help='family', nargs='*')
# version 表示オプション
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
# -h , --help は、指定しなくてもコマンドオプションに入っている
# ---△--- parser を作る ---△---
# コマンドライン引数の解釈
args = parser.parse_args()
print(args)
実行結果
$ ./argument2.py -h
usage: argument2.py [-h] [-v] -x SEX [-a AGE] [-f [FAMILY [FAMILY ...]]]
[--version]
optional arguments:
-h, --help show this help message and exit
-v verbose
-x SEX, --sex SEX sex(required)
-a AGE, --age AGE age
-f [FAMILY [FAMILY ...]], --family [FAMILY [FAMILY ...]]
family
--version show program's version number and exit
必須オプションが無い場合
$ ./argument2.py
usage: argument.py [-h] [-v] -x SEX [-a AGE] [-f [FAMILY [FAMILY ...]]]
[--version]
argument2.py: error: argument -x/--sex is required
Version
$ ./argument2.py --version
argument2.py 2.0
パラメータを指定する (-v スイッチを指定しないと False)
$ ./argument2.py -x female -a 23 -f taro hana jiro
Namespace(age='23', family=['taro', 'hana', 'jiro'], sex='female', v=False)
パラメータを指定する (-v スイッチを指定すると True)
$ ./argument.py -v -x female -a 23 -f taro hana jiro
Namespace(age='23', family=['taro', 'hana', 'jiro'], sex='female', v=True)
非必須項目を省略すると、未指定の値は None。複数の値付きオプションの場合も空の list になるのではなく None になる
$ ./argument.py -x female
Namespace(age=None, family=None, sex='female', v=False)