Argparse 如何将互斥组添加到用作所有子解析器的父解析器的参数组帮助文本

问题描述 投票:0回答:1

argparse 文档 指的是如何将互斥组添加到参数组以向这些参数添加标题/描述的示例。但是,当在

parents
中用于子解析器时,互斥组将被排除在参数组帮助文本描述之外。

这段代码:

from argparse import ArgumentParser

parent_parser = ArgumentParser(add_help=False)
parent_parser.add_argument('--common')
parent_parser_group = parent_parser.add_argument_group('New Group', 'Description.')
parent_parser_group.add_argument('--non-mut')
meg = parent_parser_group.add_mutually_exclusive_group()
meg.add_argument('--mut1', dest='mut')
meg.add_argument('--mut2', dest='mut')

parser = ArgumentParser(description='The main parser.')
subparsers = parser.add_subparsers(dest='subcommand', required=True)

command1_parser = subparsers.add_parser('command1', parents=[parent_parser])
command1_parser.add_argument('--c1')

command2_parser = subparsers.add_parser('command2', parents=[parent_parser])
command2_parser.add_argument('--c2')

command1_parser.print_help()

打印出来

usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]

options:
  -h, --help         show this help message and exit
  --common COMMON
  --mut1 MUT
  --mut2 MUT
  --c1 C1

New Group:
  Description.

  --non-mut NON_MUT

但我在期待

usage: argparse_debug.py command1 [-h] [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT] [--c1 C1]

options:
  -h, --help         show this help message and exit
  --common COMMON
  --c1 C1

New Group:
  Description.

  --mut1 MUT
  --mut2 MUT
  --non-mut NON_MUT

另请注意,

parent_parser.print_help()
具有预期的行为,因此当设置为父项时会丢失一些内容。

usage: argparse_debug.py [--common COMMON] [--non-mut NON_MUT] [--mut1 MUT | --mut2 MUT]

options:
  --common COMMON

New Group:
  Description.

  --non-mut NON_MUT
  --mut1 MUT
  --mut2 MUT

如何在子命令的帮助消息中获得一个具有自己的标题/描述的公共互斥组?

python argparse python-3.12
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.