如何去除argparse生成的帮助文本中的重复条目
解决argparse帮助信息中重复参数占位符的问题
你遇到的重复条目是argparse的默认行为——当设置nargs='+'时,它会自动用参数名(比如这里的NWO和RCCS)生成占位符,格式为参数名 [参数名 ...],这就导致了和你help文本里的说明重复。要实现你想要的自定义格式,最直接的方法是使用add_argument的metavar参数来指定自定义占位符。
具体解决步骤
修改你的add_argument调用,为每个参数添加metavar,明确指定你想要显示的占位符文本:
import argparse parser = argparse.ArgumentParser(description='calculates the NWO initial grant and the RCCS credits for a given amount of SBU', usage='sbucalc [-h][--nwo INITIAL PERCENT] [--rccs SBU RATE]') # 用metavar指定自定义占位符,元组对应nargs='+'的多个参数位置 parser.add_argument('--nwo', nargs='+', metavar=('INITIAL_GRANT', 'PERCENT'), help='Calculate NWO initial grant. Default PERCENT=10') parser.add_argument('--rccs', nargs='+', metavar=('SBU', 'RATE'), help='Calculate RCCS credits. Default RATE=1.14') parser.print_help() # 注意这里要加括号,之前的代码少了括号会无法输出帮助信息
修改后的帮助输出
执行脚本后,-h的输出会变成:
usage: sbucalc [-h][--nwo INITIAL PERCENT] [--rccs SBU RATE] calculates the NWO initial grant and the RCCS credits for a given amount of SBU optional arguments: -h, --help show this help message and exit --nwo INITIAL_GRANT [PERCENT] Calculate NWO initial grant. Default PERCENT=10 --rccs SBU [RATE] Calculate RCCS credits. Default RATE=1.14
补充说明
metavar的作用是替换argparse自动生成的参数占位符,当nargs设置为+或*时,传入元组可以为每个参数位置指定不同的占位符,argparse会自动将可选的后续参数用方括号包裹。- 我稍微调整了help文本的表述,让它更清晰,同时避免和占位符重复,你可以根据自己的需求修改help内容。
如果需要更深度的自定义帮助格式,还可以继承argparse.HelpFormatter类重写格式化逻辑,但对于你的需求来说,metavar已经完全足够解决问题了。
内容的提问来源于stack exchange,提问作者runlevel0
相关产品推荐
相关产品推荐

