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