python argparse帮助消息,禁用metavar的短选项?

use*_*847 5 python argparse

我想构建一个argparser帮助消息,如下所示:

-i, --input=INPUT    help for input
-o, --output=output  help for output
Run Code Online (Sandbox Code Playgroud)

我目前的代码:

arg_parser = argparse.ArgumentParser
arg_parser.add_argument('-i', '--input', dest='input', metavar='=INPUT', help='help for input')
arg_parser.add_argument('-o', '--output', dest='output', metavar='=OUTPUT', help='help for output')
arg_parser.print_help()
Run Code Online (Sandbox Code Playgroud)

给了我

-i =INPUT, --input =INPUT    help for input
-o =INPUT, --output =output  help for output
Run Code Online (Sandbox Code Playgroud)

我只是想知道如何摆脱短期和长期期权之间的关系.

kmc*_*hmk 8

正如已接受答案的评论中提到的,以下参数对我来说就足够了。

metavar='\b'
Run Code Online (Sandbox Code Playgroud)


hpa*_*ulj 5

不要在argparse的print_help()中显示两次长选项

问基本上是一样的.如果您不打算编写自己的HelpFormatter子类(可能需要更改一个方法),则需要使用现有的格式化工具 - help,metavar和description.

这里也有 argparse帮助,没有重复的ALLCAPS

如何避免在Python的argparse模块首都占位符?

对于那个88275023问题,我解决了这个Formatter类(但没有发布).变化即将结束

class CustomFormatter(argparse.HelpFormatter):
    def _format_action_invocation(self, action):
        if not action.option_strings:
            metavar, = self._metavar_formatter(action, action.dest)(1)
            return metavar
        else:
            parts = []
            # if the Optional doesn't take a value, format is:
            #    -s, --long
            if action.nargs == 0:
                parts.extend(action.option_strings)

            # if the Optional takes a value, format is:
            #    -s ARGS, --long ARGS
            # change to 
            #    -s, --long ARGS
            else:
                default = action.dest.upper()
                args_string = self._format_args(action, default)
                for option_string in action.option_strings:
                    #parts.append('%s %s' % (option_string, args_string))
                    parts.append('%s' % option_string)
                parts[-1] += ' %s'%args_string
            return ', '.join(parts)
Run Code Online (Sandbox Code Playgroud)

  • `metavar = ' ' ` 给出 `-i , --input ` (不是空格),而 `metavar = '\b ' ` 给出 `-i, --input` (3认同)