Python argparse:metavar和action = store_true一起 [英] Python argparse: metavar and action=store_true together
问题描述
我正在Python中使用argparse模块来解析在命令行界面中键入的参数.我对子解析器对象进行了以下add_argument调用:
I'm using argparse module in Python to parse parameters typed in a command line interface. I have the following add_argument call to a subparser object:
submit_parser.add_argument('-pv','--provision',metavar='PROVISION', dest='PROVISION',
help='provision system',
action='store_true', default=False, required=False)
我收到此错误:
Traceback (most recent call last):
File "./scripts/tp4", line 94, in <module>
main()
File "./scripts/tp4", line 74, in main
modloader.loadModules(sub_parsers)
File "/usr/lib/python2.6/site-packages/tp4/cli/Moduleloader.py", line 66, in loadModules
registered_modules[module_name].setSubparserArgs(module_sub_parser)
File "/usr/lib/python2.6/site-packages/tp4/cli/modules/AutotestModule.py", line 135, in setSubparserArgs
action='store_true', default=False, required=False)
File "/usr/share/tp4/cli/zip/argparse.zip/argparse.py", line 1302, in add_argument
TypeError: __init__() got an unexpected keyword argument 'metavar'
如果我删除action或metavar参数,它会起作用.为什么两个人不能在一起? http://docs.python.org/dev/library/argparse上的argparse文档中没有关于此限制的任何内容. html .
If I remove action or metavar parameters, it works. Why both can't be together? There is nothing about this restriction in argparse documentation at http://docs.python.org/dev/library/argparse.html.
在此先感谢您的帮助
推荐答案
metavar仅对位置参数(在命令行末尾考虑文件名)或参数采用自己的参数(例如
A metavar only makes sense for positional arguments (think filenames at the end of the command line) or for when an argument takes arguments of its own (like --input-files foo.txt bar.txt
).
您的--provision
参数是一个标志,因为您将action
设置为store_true
.它不带任何参数(即未设置nargs
).因此,拥有元变量是没有意义的.
Your --provision
argument is a flag because you set the action
to store_true
. It doesn't take any arguments (i.e., nargs
isn't set). As such, it doesn't make sense to have a metavar.
来自 argparse
文档:
当
ArgumentParser
生成帮助消息时,它需要某种方式来引用每个期望的参数.默认情况下,ArgumentParser
对象使用dest值作为每个对象的名称".默认情况下,对于位置参数操作,直接使用dest值,对于可选参数操作,dest值使用大写.因此,带有dest='bar'
的单个位置参数将称为bar.单个可选参数--foo
后面应带有单个命令行参数,将被称为FOO.
When
ArgumentParser
generates help messages, it need some way to refer to each expected argument. By default,ArgumentParser
objects use the dest value as the "name" of each object. By default, for positional argument actions, the dest value is used directly, and for optional argument actions, the dest value is uppercased. So, a single positional argument withdest='bar'
will be referred to as bar. A single optional argument--foo
that should be followed by a single command-line argument will be referred to as FOO.
这篇关于Python argparse:metavar和action = store_true一起的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!