【问题标题】:python argparse help message, disable metavar for short options?python argparse帮助消息,禁用短选项的元变量?
【发布时间】:2014-05-29 14:46:04
【问题描述】:

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

-i, --input=INPUT    help for input
-o, --output=output  help for output

我当前的代码:

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()

给我

-i =INPUT, --input =INPUT    help for input
-o =INPUT, --output =output  help for output

我只是想知道如何摆脱短选项和长选项之间的问​​题。

【问题讨论】:

  • 使用默认的帮助格式化程序无法做到这一点;您必须编写一个客户帮助格式化程序来完成此操作。

标签: python argparse


【解决方案1】:

Don't show long options twice in print_help() from argparse

问的问题基本相同。如果您无法编写自己的 HelpFormatter 子类(它可能需要更改一种方法),则需要使用现有的格式化工具 - help、metavar 和 description。

这里也是 argparse help without duplicate ALLCAPS

How do I avoid the capital placeholders in python's argparse module?

对于那个 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)

【讨论】:

  • metavar = ' ' 给出-i , --input (不是空格),而metavar = '\b ' 给出-i, --input
【解决方案2】:

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

metavar='\b'

【讨论】:

  • 如果有问题的参数选项将是 required=True,我建议使用此选项 - 如果您使用 metavar='',您将获得 AssertionError
猜你喜欢
  • 2013-04-28
  • 2013-09-10
  • 2016-03-24
  • 1970-01-01
  • 2014-10-07
  • 2015-07-26
  • 2016-09-18
  • 2016-06-21
  • 2012-08-17
相关资源
最近更新 更多