5

使用argparse,我有以下行:

parser.add_argument("-p", "--parameter", type=str, default=None, nargs='+',
                        help="some option",
                        choices=allValues.keys()
                        )

生成的help消息显示 中的所有值allValues

-p {a,b,c,d,e,f,g,h,i,l,m; a ,b ,c , d, e, f, g, h, i, l, m} [{a ,b ,c , d, e, f, g, h, i, l, m} ...] , --参数{a,b,c,d,e,f,g,h,i,l,m; a,b,c,d,e,f,g,h,i,l,m} [{a,b,c,d,e,f,g,h,i,l,m; a ,b ,c , d, e, f, g, h, i, l, m} ...] 一些选项

我可以从上面删除并 只显示参数名称帮助消息吗?{a ,b ,c , d, e, f, g, h, i, l, m; a ,b ,c , d, e, f, g, h, i, l, m}

4

2 回答 2

10

使用metavar参数::

parser.add_argument("-p", "--parameter", type=str, default=None, nargs='+',
                    help="some option",
                    choices=allValues.keys(),
                    metavar='PARAMETER'
                    )

这将给出::

-p PARAMETER, --parameter PARAMETER some option

如果您根本不想显示元变量,可以考虑传递''metavar. 否则,我相信您将不得不创建自己的自定义格式化程序类并将其传递给ArgumentParser.

于 2013-07-18T15:52:29.927 回答
0

lesspass 上,我们同时使用了两者metavar,并显示了一个自定义type控制帮助和错误消息

  • 用于metavar获得更好的帮助信息
  • 使用自定义type控制错误信息

输出

错误信息

env ❯ python3 lesspass/core.py  site login masterpassword --lowercase --digits --length 2
usage: lesspass SITE [LOGIN] [MASTER_PASSWORD] [OPTIONS]
core.py: error: argument -L/--length: 2 is out of range, choose in [5-35]

帮助信息

env ❯ python3 lesspass/core.py  --help
  …
  -L [5-35], --length [5-35]
                        password length (default: 16, min: 5, max: 35)
  …

怎么做?

自定义类型

def range_type(value_string):
    value = int(value_string)
    if value not in range(5, 35+1):
        raise argparse.ArgumentTypeError("%s is out of range, choose in [5-35]" % value)
    return value

add_argument宣言

parser.add_argument(
    "-L",
    "--length",
    default=16,
    choices=range(5, 35+1),
    type=range_type,
    help="password length (default: 16, min: 5, max: 35)",
    metavar='[5-35]'

)

于 2019-04-16T09:01:12.177 回答