2013-03-08 21 views
85

Chciałbym mieć opcjonalny argument, który będzie domyślny dla wartości, jeśli tylko flaga jest obecna bez określonej wartości, ale przechowuje określoną przez użytkownika wartość zamiast wartości domyślnej, jeśli użytkownik określa wartość. Czy istnieje już jakieś działanie?Python argparse: wartość domyślna lub podana wartość

Przykład:

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 

mogę utworzyć akcję, ale chciałem zobaczyć, czy nie było istniejący sposób to zrobić.

Odpowiedz

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='?' oznacza 0-or-1 argumenty
  • const=1 ustawia domyślne gdy istnieją 0 argumenty
  • type=int konwertuje argument int

Jeśli chcesz test.py ustawić example do 1 nawet jeśli nie --example jest określona, ​​wtedy to default=1. Oznacza to, że z

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

następnie

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

Dziękuję za tym domyślne, to było dokładnie to, czego potrzebowałem. – Michael

+0

Plik "/usr/lib/python2.7/argparse.py", wiersz 1294, w add_argument action = action_class (** kwargs) TypeError: __init __() dostał nieoczekiwany argument ze słowem kluczowym "const" –

+1

Dziękujemy za uwzględnienie const, dokładnie to, czego potrzebowałem. – Dannid

Powiązane problemy