如何让argparse帮助信息不重复显示双选项后的参数标识?
关于argparse短/长选项帮助信息去重的问题
当使用argparse同时指定短选项与长选项参数时,示例代码如下:
parser.add_argument("-m", "--min", dest="min_value", type=float, help="Minimum value")
执行--help后默认的帮助信息为:
-m MIN_VALUE, --min MIN_VALUE Minimum value
希望将帮助信息中的MIN_VALUE去重,改成类似这样的格式:
[-m | --min-value] MIN_VALUE Minimum value
想问除了完全重写--help消息外,能不能通过argparse本身实现这个效果?
解决方案
可以通过自定义argparse的帮助格式化类来实现,不用完全重写整个帮助消息。核心是继承argparse.HelpFormatter,重写它的_format_action_invocation方法,修改选项的拼接逻辑。
具体实现代码
import argparse class CustomHelpFormatter(argparse.HelpFormatter): def _format_action_invocation(self, action): # 处理位置参数的情况 if not action.option_strings: default = self._get_default_metavar_for_positional(action) metavar, = self._metavar_formatter(action, default)(1) return metavar # 处理可选参数的情况 else: parts = [] # 区分必填/可选选项的括号显示 if action.required: parts.extend(action.option_strings) else: parts.append('[{}]'.format(' | '.join(action.option_strings))) # 添加参数占位符(仅显示一次) if action.nargs != 0: default = self._get_default_metavar_for_optional(action) args_string = self._format_args(action, default) parts.append(args_string) return ' '.join(parts) # 使用自定义格式化器初始化解析器 parser = argparse.ArgumentParser(formatter_class=CustomHelpFormatter) parser.add_argument("-m", "--min", dest="min_value", type=float, help="Minimum value") parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose mode") # 打印帮助信息 parser.print_help()
效果展示
执行上述代码后,输出的帮助信息如下:
usage: test.py [-h] [-m | --min MIN_VALUE] [-v | --verbose] optional arguments: -h, --help show this help message and exit -m | --min MIN_VALUE Minimum value -v | --verbose Enable verbose mode
这样就实现了短/长选项共用一个参数占位符的效果,仅修改了选项部分的格式化逻辑,无需完全重写整个帮助内容。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

