Python ArgParse自定义动作搭配metavar时-h输出重复问题排查
Python ArgParse自定义Action metavar重复问题解决
问题原因
你遇到的metavar重复问题是两个配置叠加导致的:
- 你给
--arg2设置了nargs="*",表示该参数可以接收0或任意多个独立的传参项 - argparse处理可变长度参数(nargs为
*、+等)的metavar时,默认会为每个可变参数的占位位置都套用你传入的metavar值。你传入的metavar="key1=val1 key2=val2"被argparse当成了单个传参项的提示文本,所以生成帮助时会给每个占位位置都重复输出这段文本,最终出现了你看到的重复效果。
解决方案
方案1:修正metavar配置(最简便)
你只需要把metavar设为单个key=val即可,多个参数的提示argparse会自动补充省略号,完全符合你的实际传参逻辑,修改后的参数注册代码如下:
sub_1.add_argument( "--arg2", action=KeyValue, nargs="*", default=NoArgumentProvided(), help='arg 2 help,传参格式为`--arg2 key1=val1 key2=val2 ...`', metavar="key=val" )
修改后的帮助输出如下:
usage: arg_issue.py test [-h] [--arg1] [--arg2 [key=val [key=val ...]]] test description optional arguments: -h, --help show this help message and exit --arg1 arg1 help --arg2 [key=val [key=val ...]] arg 2 help,传参格式为`--arg2 key1=val1 key2=val2 ...`
方案2:完全自定义帮助提示
如果你不想用metavar,也可以直接去掉metavar配置,将完整的参数使用说明全部写到help文本中即可,argparse会默认用参数的dest作为占位符,不会出现重复问题。
内容的提问来源于stack exchange,提问作者EdF
相关产品推荐
相关产品推荐

