簡體   English   中英

Python argparse:metavar和action = store_true在一起

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

我在Python中使用argparse模塊來解析在命令行界面中輸入的參數。 我對subparser對象進行了以下add_argument調用:

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'

如果我刪除動作或metavar參數,它可以工作。 為什么兩者不能在一起? http://docs.python.org/dev/library/argparse.html的 argparse文檔中沒有關於此限制的內容。

在此先感謝您的幫助

metavar只對位置參數(在命令行末尾的文件名)或者參數接受自己的參數(如--input-files foo.txt bar.txt--input-files foo.txt bar.txt

您的--provision參數是一個標志,因為您將action設置為store_true 它不需要任何參數(即,沒有設置nargs )。 因此,擁有一個metavar是沒有意義的。

argparse文檔

ArgumentParser生成幫助消息時,需要某種方式來引用每個預期的參數。 默認情況下, ArgumentParser對象使用dest值作為每個對象的“名稱”。 默認情況下,對於位置參數操作,直接使用dest值,對於可選參數操作,dest值是大寫的。 因此, dest='bar'的單個位置參數將被稱為bar。 單個可選參數--foo應該后跟單個命令行參數將被稱為FOO。

要從@pwc中提取答案,您需要使用dest而不是metavar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM