Python argparse:metavar和action = store_true一起 [英] Python argparse: metavar and action=store_true together

查看:275
本文介绍了Python argparse:metavar和action = store_true一起的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在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 with dest='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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆