Python:不要用argparse显示“选择”

时间:2013-07-18 15:43:24

标签: python parameters argparse

使用 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}只显示参数的名称以及帮助消息?

2 个答案:

答案 0 :(得分:9)

使用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

答案 1 :(得分: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]'