2012-07-16 4 views
9

Czy jest jakiś sposób analizowania flag, takich jak [+-]a,b,c,d?Python argparse toggle flags

foo.py +s -b 

należy przechowywać prawdziwe w dest z s i fałsz w dest z b, podobnie jak odbywa się poprzez Windows attrib lub Linux chmod.

Obecnie używam dwóch oddzielnych argumentów: +s i -s z store_true i store_false, odpowiednio. Ale tworzy brzydką pomocy z niego listą wszystkich flagę dwukrotnie (+ do & -a)

Innym Rozwiązaniem byłoby ręcznie analizować rozszerzonego argumentu z regex (który jakoś wydaje się dużo łatwiejsze i używać opis niestandardowego ale przed robi, że po prostu chciał się rozejrzeć, czy jest coś, za pomocą którego mogę wykonać to samo używając argparse sobie.

Odpowiedz

5

można to zrobić przekazując zarówno -s i +s do jednego add_argument rozmowy i korzystania akcję niestandardową :

class ToggleAction(argparse.Action): 
    def __call__(self, parser, ns, values, option): 
     setattr(ns, self.dest, bool("-+".index(option[0]))) 
ap = ArgumentParser(prefix_chars='-+') 
ap.add_argument('-s', '+s', action=ToggleAction, nargs=0) 

ap.parse_args(['+s']) 
Namespace(s=True) 

ap.parse_args(['-s']) 
Namespace(s=False) 
+0

Świetnie, jakoś pomyślałem, że "akcja" będzie kluczem, ale pominąłem definiując klasę Akcji. – nbaztec