- が付いたものをオプション、その後に続くものを引数と呼ぶ (–option argument)import argparse parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) parser.add_argument("foo", help = "positional1") parser.add_argument("bar", help = "positional2") parser.add_argument("--input", "-i", metavar = "file", dest = "hoge", nargs = "+", help = "optional") parser.add_argument("-n", metavar = "number", dest = "number", type = int, help = "number", required = True) parser.add_argument("-f", dest = "flag", action = "store_true", help = "flag option") : : args = parser.parse_args()
parser: parser オブジェクトArgumentParser(): パーサーの設定formatter_class=argparse.RawTextHelpFormatter を指定すると、後述の help で改行が使える.add_argument: オプションおよび引数の登録foo or bar: 位置引数foo bar の順に与えなければならない–input or -i: オプション引数- か – を付けることで指定できるadd_argument() の頭で指定するhelp = “…”: ヘルプArgumentParser() で formatter_class=argparse.RawTextHelpFormatter を指定していれば、\n で改行もできるmetavar = “…”: ヘルプで表示するための引数の対象–input INPUT, -i INPUT とロングオプション (なければ、ショートオプション) を大文字にした文字列がオプションの後に続いてユーザを混乱させる (オプションと引数が一致していれば問題ない) –input file, -i file となり、ファイルを指定すれば良いことがユーザに伝わるdest = “…”: 引数を受け取るための変数名args.変数名 で受け取ることができる変数名 は dest で指定した変数名 > ロングオプション名 > ショートオプション名の優先順位で決まるargs.hoge や args.number で受け取ることができるnargs = “…”: 引数の数を指定nargs = 1 になっている)? を指定した場合、1 つの引数か、ない場合は default = “…” で指定した引数になる (default を指定しない場合は、None が渡される)* を指定した場合、0 以上の引数を必要とする (0 以上なのでなくても良い)+ を指定した場合、最低 1 以上の引数を必要とする*、+ を指定した場合は、リストで引数を受け取ることができるtype = …: 引数の型を指定required = True: 必須オプション (True でオプションが必須になる)action = “store_true”: オプションの有無で値を決定するstore_true は、オプションが指定された時に変数に True を代入するstore_false は、指定された時に変数に False を代入するargs: 引数オブジェクトadd_argument_group() を用いる。parser = argparse.ArgumentParser(description = "test", formatter_class=argparse.RawTextHelpFormatter) group_a = parser.add_argument_group("Group A") group_a.add_argument("foo", help = "help message for foo") group_a.add_argument("bar", help = "help message for bar") group_b = parser.add_argument_group("Group B") group_b.add_argument("hoge", help = "help message for hoge") args = parser.parse_args()
parser にグループ (Group A と Group B) を追加した変数 (group_a と group_b) を作成し、それぞれに引数を追加していく。$ test.py --help usage: test.py [-h] foo bar hoge test optional arguments: -h, --help show this help message and exit Group A: foo help message for foo bar help message for bar Group B: hoge help message for hoge
add_mutually_exclusive_group() を使う。parser = argparse.ArgumentParser(description = "test", formatter_class=argparse.RawTextHelpFormatter) group = parser.add_mutually_exclusive_group() group.add_argument("--foo", help = "help message for foo") group.add_argument("--bar", help = "help message for bar") args = parser.parse_args()
add_argument_group() と同様に、グループ group を作成し、その中に同時に指定できない引数を加える (加える引数は 2 つ以上でも OK)。required を指定するのではなく、add_mutually_exclusive_group(required = True) にする (引数に required を付けるとエラーになる)。import argparse import sys parser = argparse.ArgumentParser(description = "...") parser.add_argument("-a", required = False, help = "A requires B") parser.add_argument("-b", required = "-a" in sys.argv, help = "B") parser.add_argument("-c", help = "C") args = parser.parse_args()
-a が含まれているかを調べて、True か False を動的に required に与えているだけ。