2013-08-22 18 views
19

Piszę program, który używa argparse, do parsowania niektórych argumentów, których potrzebuję.Python argparse: nazwa parametry

teraz mam to:

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

kiedy uruchomić ten skrypt widzę to:

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

Jak mogę zmienić swój kod w ten sposób, że „strona” help pokaże mi:

--rename OLDFILE NEWFILE 

Czy mogę następnie użyć OLD FILE i NEWFILE wartość w ten sposób?

args.rename.oldfile 
args.rename.newfile 

Odpowiedz

26

Jeśli ustawisz 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) 

Następnie test.py -h daje

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

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

Następnie można przejść do argumentów z

oldfile, newfile = args.rename 

Jeśli naprawdę chcesz, aby uzyskać dostęp do ol DFILE z args.rename.oldfile można skonfigurować akcję niestandardową:

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) 

ale dodatkowy kod tak naprawdę nie wydaje mi się, że warto.

+0

dzięki dla wszystkich informacji dostarczonych ... „oldfile, newfile = args.rename” wykona pracę :) – Wolfy

1

Przeczytaj dokumentację argparse (http://docs.python.org/2.7/library/argparse.html#metavar):

różnych wartości nargs może spowodować metavar być używane wielokrotnie. Zapewnienie krotki do metavar określa inny obraz dla każdego z argumentów:

>>> 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 
Powiązane problemy