2013-08-22 14 views
19

Sto scrivendo un programma che usa argparse, per analizzare alcuni argomenti di cui ho bisogno.Python argparse: parametri nome

per ora ho questo:

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

quando ho eseguito questo script vedo questo:

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

Come posso cambiare il mio codice in questo modo che l'aiuto "pagina" mi mostrerà:

--rename OLDFILE NEWFILE 

Posso quindi utilizzare VECCHIO FILE e NEWFILE valore in questo modo?

args.rename.oldfile 
args.rename.newfile 

risposta

26

Se si imposta 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) 

Poi test.py -h cede

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

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

È quindi possibile accedere agli argomenti con

oldfile, newfile = args.rename 

Se davvero si vuole accedere al olo dfile con args.rename.oldfile è possibile impostare un'azione personalizzata:

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) 

ma il codice in più non sembra davvero la pena per me.

+0

grazie per tutti i dettagli forniti ... "vecchiofile, newfile = args.rename" farà il lavoro :) – Wolfy

1

leggere la documentazione argparse (http://docs.python.org/2.7/library/argparse.html#metavar):

diversi valori di nargs possono causare il metavar per essere utilizzato più volte. Fornire una tupla per metavar specifica una visualizzazione diversa per ciascuno degli argomenti:

>>> 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 
Problemi correlati