2013-03-08 6 views
85

Mi piacerebbe avere un argomento facoltativo che verrà impostato su un valore predefinito se solo il flag è presente senza alcun valore specificato, ma memorizza un valore specificato dall'utente anziché il valore predefinito se l'utente specifica un valore. C'è già un'azione disponibile per questo?Python argparse: valore predefinito o valore specificato

Un esempio:

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 

posso creare un'azione, ma volevo vedere se ci fosse un modo esistente per fare questo.

risposta

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='?' significa 0-o-1 argomenti
  • const=1 imposta il valore predefinito quando ci sono 0 argomenti
  • type=int Converte l'argomento int

Se si desidera test.py per impostare example-1 anche se non viene specificato alcun --example, quindi includono default=1. Cioè, con

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

poi

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

Grazie per l'inclusione di default, era esattamente quello che mi serviva. – Michael

+0

File "/usr/lib/python2.7/argparse.py", riga 1294, in add_argument action = action_class (** kwargs) TipoErrore: __init __() ottenuto un argomento parola chiave imprevisto 'const' –

+1

Grazie per aver incluso il const, era esattamente quello di cui avevo bisogno. – Dannid