環境
- Python 3.9.7
- argparse 1.1
やりたいこと
argparseモジュールを使ってCLIを作っています。
以下のように、相互排他グループ(--foo
or --bar
)を含む引数グループ"global options"を作成したいです。
foo.py
import argparse
def add_parser(parser):
argument_group = parser.add_argument_group("global options")
argument_group.add_argument("--xxx")
argument_group.add_argument("--yyy")
exclusive_group = argument_group.add_mutually_exclusive_group()
exclusive_group.add_argument("--foo", action="store_true")
exclusive_group.add_argument("--bar", action="store_true")
def main():
parser = argparse.ArgumentParser(description="test")
parser.add_argument("integers", type=int, nargs="+")
add_parser(parser)
args = parser.parse_args()
if __name__ == "__main__":
main()
$ python foo.py -h
usage: foo.py [-h] [--xxx XXX] [--yyy YYY] [--foo | --bar] integers [integers ...]
test
positional arguments:
integers
optional arguments:
-h, --help show this help message and exit
global options:
--xxx XXX
--yyy YYY
--foo
--bar
発生した問題
"global options"という引数グループは、他のコマンドでも利用するコマンドライン引数なので、ArgumentParserコンストラクタ引数parents
に設定したいです。
def main():
parent_parser = argparse.ArgumentParser(add_help=False)
add_parser(parent_parser)
parser = argparse.ArgumentParser(description="test", parents=[parent_parser])
parser.add_argument("integers", type=int, nargs="+")
args = parser.parse_args()
$ python foo.py -h
usage: foo.py [-h] [--xxx XXX] [--yyy YYY] [--foo | --bar] integers [integers ...]
test
positional arguments:
integers
optional arguments:
-h, --help show this help message and exit
--foo
--bar
global options:
--xxx XXX
--yyy YYY
しかしヘルプを見ると、相互排他グループである--foo
, --bar
は、global options
でなくデフォルトのoptional arguments
に含まれていました。
原因
分かりませんでした。