2013-08-22 102 views
19

我在寫一個使用argparse的程序來解析我需要的一些參數。Python argparse:名稱參數

現在我有這樣的:

parser.add_argument('--rename', type=str, nargs=2, help='some help')

當我運行該腳本我看到這一點:

optional arguments: 
    -h, --help   show this help message and exit 
    --rename RENAME RENAME 
         some help 

我怎樣才能改變我的代碼以如下方式幫助「頁面」將告訴我:

--rename OLDFILE NEWFILE 

然後我可以使用OLD FILENEWFILE這樣的價值?

args.rename.oldfile 
args.rename.newfile 

回答

26

如果設置metavar=('OLDFILE', 'NEWFILE')

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--rename', type=str, nargs=2, help='some help', 
        metavar=('OLDFILE', 'NEWFILE')) 
args = parser.parse_args() 
print(args) 

然後test.py -h產生

usage: test.py [-h] [--rename OLDFILE NEWFILE] 

optional arguments: 
    -h, --help   show this help message and exit 
    --rename OLDFILE NEWFILE 
         some help 

然後,您可以用

oldfile, newfile = args.rename 

訪問這些參數如果你真的想訪問OL與args.rename.oldfile dfile你可以建立一個自定義操作:

import argparse 
class RenameAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     setattr(namespace, self.dest, 
       argparse.Namespace(
        **dict(zip(('oldfile', 'newfile'), 
           values)))) 

parser = argparse.ArgumentParser() 
parser.add_argument('--rename', type=str, nargs=2, help='some help', 
        metavar=('OLDFILE', 'NEWFILE'), 
        action=RenameAction) 
args = parser.parse_args() 

print(args.rename.oldfile) 

,但額外的代碼並沒有真正似乎值得我。

+0

感謝提供的所有細節......「的oldfile,newfile中= args.rename」將做的工作:) – Wolfy

1

閱讀argparse文檔(http://docs.python.org/2.7/library/argparse.html#metavar):

NARGS的不同的值可以使得metavar被多次使用。提供一個元組metavar指定不同的顯示爲每個參數:

>>> parser = argparse.ArgumentParser(prog='PROG') 
>>> parser.add_argument('-x', nargs=2) 
>>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz')) 
>>> parser.print_help() 
usage: PROG [-h] [-x X X] [--foo bar baz] 

optional arguments: 
-h, --help  show this help message and exit 
-x X X 
--foo bar baz