2013-04-05 9 views
35

Czy można wymagać, aby argument argparse był jedną z kilku ustawionych wartości?Zezwalanie na określone wartości argumentu Argparse

Moje bieżące podejście polegałoby na ręcznym sprawdzeniu argumentu i jeśli nie jest to jedna z dozwolonych wartości, wywołaj print_help() i zakończ.

Oto obecna implementacja:

... 
parser.add_argument('--val', dest='val', action='store', 
         help='Special testing value') 

args = parser.parse_args(sys.argv[1:]) 
if args.val not in ['a','b','c']: 
    parser.print_help() 
    sys.exit(1) 

To nie tak, że jest to szczególnie trudne, ale raczej, że wydaje się być brudny.

+0

Wow, odpowiedziałeś na to szybko ... :-P – mgilson

+2

Zadałem pytanie na IRC, nie otrzymałem odpowiedzi i napisałem to wszystko tutaj. Kiedy szlifowałem pytanie, zauważyłem to w dokumentach. Ponieważ pytanie nie było już na SO, wydawało się, że jest dobrym kandydatem do samo odpowiedzi. – Moshe

+3

Tak. I zgodnie z [meta] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-hready-found-the-answer-to), jest to zgodne z projektowanie celów witryny. Mając to na uwadze, +1 do Ciebie (lub czy to +2 :-P) – mgilson

Odpowiedz

56

argparse argument może być ograniczone do określonych wartości z parametrem choices:

... 
parser.add_argument('--val', dest='val', action='store', 
         choices=['a','b','c'], 
         help='Special testing value') 

args = parser.parse_args(sys.argv[1:]) 

Zobacz docs więcej szczegółów.

+0

Od razu odpowiedziałeś na własne pytanie? Po co pytać? – viddik13

+5

Zobacz komentarze na pytanie. – Moshe

+1

'-val' i' dest = 'val'' jest zbędny. Ten ostatni można pominąć i będzie pochodzić z '--val' –

Powiązane problemy