2013-03-08 9 views
85

Ich möchte ein optionales Argument haben, das standardmäßig auf einen Wert gesetzt wird, wenn nur das Flag vorhanden ist, aber kein Wert angegeben ist, sondern ein benutzerdefinierter Wert anstelle des Standardwerts für den Benutzer gespeichert wird Gibt einen Wert an. Gibt es dafür bereits eine Aktion?Python argparse: Standardwert oder angegebener Wert

Ein Beispiel:

python script.py --example 
# args.example would equal a default value of 1 
python script.py --example 2 
# args.example would equal a default value of 2 

Ich kann eine Aktion erstellen, aber wollte sehen, ob es bereits eine Art und Weise war, dies zu tun.

Antwort

138
import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('--example', nargs='?', const=1, type=int) 
args = parser.parse_args() 
print(args) 

% test.py 
Namespace(example=None) 
% test.py --example 
Namespace(example=1) 
% test.py --example 2 
Namespace(example=2) 

  • nargs='?' bedeutet 0-oder-1 Argumente
  • const=1 die Standardsätze, wenn es 0 Argumente
  • type=int wandelt das Argument
int

Wenn Sie test.py wollen example-1 selbst einstellen, wenn kein --example angegeben ist, sind dann default=1. Das heißt, mit

parser.add_argument('--example', nargs='?', const=1, type=int, default=1) 

dann

% test.py 
Namespace(example=1) 
+1

Vielen Dank für einschließlich der Standard, es war genau das, was ich brauchte. – Michael

+0

Datei "/usr/lib/python2.7/argparse.py", Zeile 1294, in add_argument action = Aktionsklasse (** kwargs) TypeError: __init __() hat ein unerwartetes Schlüsselwortargument 'const' erhalten –

+1

Vielen Dank für die Einbeziehung Das Const, es war genau das, was ich brauchte. – Dannid