2017-02-08 2 views
0

Ich habe ein Argument Parser wie so:Wie man alle Voreinstellungen von `argparse` ergreift?

def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

Jetzt wird, bekommen alles, was ich tun möchte, nur die Standardzuordnungen, etwa so:

args = args_parser() 

Und dann will ich args['k']100 zurückzukehren, seit das ist der Standard. Wie mache ich das möglich?

+0

'args = args_parser()

Sie können auch mit einem kleinen Zusatz den Standard in der Hilfezeile machen anzuzeigen. parse_args() '? Sie müssten 'args.k' machen, um' 100' zu bekommen, aber sonst ... – jonrsharpe

+0

'parser.parse_args(). K' – metatoaster

Antwort

0

Sie müssen die .parse_args() Funktion auf Ihrem Parser-Objekt aufrufen, um tatsächlich die Befehlszeilenargumente zurückzukehren analysiert und den Attributen zugewiesen, die in Ihrer Anweisung .add_argument() definiert sind. So etwas wie:

parser = args_parser() 
args = parser.parse_args() 
k_value = args.k 

Die ‚args‘ Variable von .parse_args() zurückgegeben werden Attribute zugeordnet haben den Namen, den Sie über den .add_argument() Aufruf zuweisen, obwohl, wenn kein Standard ist und die Benutzer stellt kein gegebenes Argument zur Verfügung, sein Wert wird 'None' sein.

1

Dies sollte das für Sie tun. Ich glaube, Sie sollten in der Lage sein, diese Dokumente in den Python zu finden auf ArgumentParser auch:

vars(args.parse_args())['k'] 
0
def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

parser = args_parser(): 
args = parser.parse_args([])  
print(args)  # see all values 
print(args.k) # see just the k attribute 

parse_args() parst die sys.argv wie in der Kommandozeile vorgesehen. parse_args([]) analysiert eine leere Liste, als ob Sie das Skript ohne Argumente aufgerufen hätten. Ich prüfe regelmäßig ein Parser-Setup mit solchen Aufrufen.

Mit Ihrer Argumentdefinition funktioniert die [] einwandfrei und zeigt den Standardwert k. Bei anderen Definitionen könnte [] einen Fehler verursachen. Wenn Sie zum Beispiel

parser.add_argument('infile', help='positional file name') 

jetzt eine Zeichenfolge ist erforderlich. Für eine einfache Position wie diese ist kein Standard erforderlich und auch nicht sinnvoll. Andere Parameterkombinationen können jedoch einen Standardwert verwenden.

Ich könnte Ihnen zeigen, wie Sie auf die default zugreifen, wie im Befehl add_argument festgelegt, aber das beinhaltet einige undokumentierte Funktionen. Darüber hinaus gibt es mehrere Möglichkeiten, Standardwerte zu definieren, sodass das Thema kompliziert werden kann.

Anyways einfach das parse_args mit einer leeren Liste läuft oft genug.

parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 

Zum Beispiel in einer interaktiven ipython Sitzung:

In [73]: parser=argparse.ArgumentParser() 
In [74]: parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 
Out[74]: _StoreAction(option_strings=['--k'], dest='k', nargs=None, 
    const=None, default=100, type=<class 'int'>, choices=None, 
    help='numbers, %(default)s', metavar=None) 

In [75]: parser.print_help() 
usage: ipython3 [-h] [--k K] 

optional arguments: 
    -h, --help show this help message and exit 
    --k K  numbers, 100 

In [76]: parser.parse_args([]) # displays args 
Out[76]: Namespace(k=100) 
In [78]: parser.parse_args(['--k','200']) 
Out[78]: Namespace(k=200) 
Verwandte Themen