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
如何在子命令的帮助消息中获得一个具有自己的标题/描述的公共互斥组?
答案与这个答案非常相似:互斥的参数组不会影响帮助输出,只会影响实际的解析。此外,参数组(非互斥)仅影响帮助消息输出,而不影响解析。
我对于argparse
如何处理参数组,尤其是互斥的参数组有严重的问题
。我强烈建议放弃
argparse
,转而使用像
docopt
这样更好的库,我的所有项目现在都使用它。它更简单(通过声明性而不是命令性)并且可以将文档作为代码。另一个很好的选择是 click
,尽管那个有点复杂。 docopt
可能会处理您的确切用例,最好的部分是帮助输出是完全 当您编写它时。