Sinalizadores de alternância de argos Python

9

Existe alguma maneira na argparse para analisar sinalizadores como [+-]a,b,c,d ?

foo.py +s -b

deve armazenar True em dest de s e False em dest de b , assim como feito pelo Windows attrib ou o Linux chmod .

Atualmente, estou usando dois argumentos separados +s e -s com store_true e store_false , respectivamente. Mas isso cria uma ajuda feia ao listar cada bandeira duas vezes (+ a & amp; -a)

Outra solução seria analisar manualmente o argumento estendido com regex (que, de alguma forma, parece muito mais fácil e usa descrição customizada, mas antes de fazer isso. Eu só queria olhar em volta se houvesse algo usando Eu poderia executar a mesma coisa usando argparse em si.

    
por nbaztec 16.07.2012 в 17:43
fonte

1 resposta

5

Você pode fazer isso passando -s e +s para uma única chamada add_argument e usando uma ação personalizada:

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)
    
por ecatmur 16.07.2012 / 20:49
fonte