85915


# 実行環境

  * Python 3.9.7
  * argparse 1.1

# やりたいこと

以下のように、相互排他グループ（`--foo` or `--bar`）を含む引数グループ"global options"を作成したいです。  
引数グループ"global
options"は、各コマンドで共通のコマンドライン引数なので、`ArgumentParser`コンストラクタの`parents`引数に設定しました。

[code]

    import argparse
    
    
    def create_parent_parser():
        parser = argparse.ArgumentParser(add_help=False)
        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")
        return parser
    
    def main():
        parent_parser = create_parent_parser()
        parser = argparse.ArgumentParser(description="test", parents=[parent_parser])
        parser.add_argument("--num", type=int, nargs="+")
        args = parser.parse_args()
    
    
    if __name__ == "__main__":
        main()
    
[/code]

[code]

    $ python foo.py -h
    usage: foo.py [-h] [--xxx XXX] [--yyy YYY] [--foo | --bar] [--num NUM [NUM ...]]
    
    test
    
    optional arguments:
      -h, --help           show this help message and exit
      --foo
      --bar
      --num NUM [NUM ...]
    
    global options:
      --xxx XXX
      --yyy YYY
    
[/code]

# 質問

相互排他グループ（`--foo` or `--bar`）は、"global options"グループに設定したにも関わらず、"option
arguments"グループ内に表示されていました。  
なぜ、このように表示されるのでしょうか？  
`parents`引数に設定しなければ、`--foo` or `--bar`は、"global options"グループ内に表示されました。

# 補足

発生している現象を、[Qiita](https://qiita.com/yuji38kwmt/items/1d51ca62f6e8fb1b66fc)
にもう少し詳しく書きました。


CC BY-SA 4.0
2022-01-25T02:33:52.947
85914
2022-01-25T02:54:07.197
2022-01-25T02:41:42.013
3060
19524
question
python
ArgumentParserコンストラクタ引数parentsに、相互排他グループを含む引数グループを渡すと、正しくグループ化されない原因を教えてください。


[argparse](https://docs.python.org/ja/3/library/argparse.html)の公式ドキュメントに記載されている通り、現時点では相互排他は引数グループ名のサポートが未対応なのではないでしょうか。

リンク先より抜粋:

> 現在のところ、相互排他引数グループは
> [add_argument_group()](https://docs.python.org/ja/3/library/argparse.html#argparse.ArgumentParser.add_argument_group)
> の _title_ と _description_ 引数をサポートしていません。


CC BY-SA 4.0
2022-01-25T02:54:07.197
85915
2022-01-25T02:54:07.197
9820
85914
answer