2013-06-06 18 views
5

Chciałbym, aby parser jak cmd [-a xxx -b xxx] -c xxx -d xxxargparse dwa argumenty są od siebie zależne

Kiedy -a służy chcę -b być stosowane zbyt. podobnie, jeśli użyto -b, należy również użyć -a. Jest ok. Zarówno -a, jak i nie są używane.

Jak to zrobić? Próbowałem niestandardowych działań, ale nie idzie dobrze.

Odpowiedz

9

Argparse nie wspiera natywnie tego typu zastosowań.

Najskuteczniejszą rzeczą do zrobienia jest sprawdzić i zobaczyć, czy te typy warunki są spełnione po parsowania:

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-b') 
parser.add_argument('-c') 

args = parser.parse_args() 

required_together = ('b','c') 

# args.b will be None if b is not provided 
if not all([getattr(args,x) for x in required_together]): 
    raise RuntimeError("Cannot supply -c without -b") 
+0

Dzięki za rozwiązanie. – timchen

10

Lepszy projekt byłoby mieć jedną opcję, która przyjmuje dwa argumenty:

parser.add_argument('-a', nargs=2) 

Następnie należy podać opcję z 2 argumentami lub nie określać jej wcale.

$ script -a 1 2 

lub

$ script 

Akcja użytkownika (lub przetwarzanie końcowe) można podzielić na krotki args.a w dwóch oddzielnych wartości args.a i args.b.

+0

Dzięki, wygląda dobrze, w końcu w moim programie użyłem nargs = 2. – timchen

+1

W rzeczywistości jest to 'nargs' not' narg', ale nie mogę edytować odpowiedzi, ponieważ jest to tylko 1 znak – Leonardo

Powiązane problemy