2013-08-22 67 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