96 votes

Python argparse - Ajoute un argument à plusieurs sous-analyseurs

Mon script définit un analyseur principal et plusieurs sous-analyseurs. Je souhaite appliquer l' -p à certains sous-analyseurs. Jusqu'à présent, le code ressemble à ceci:

 parser = argparse.ArgumentParser(prog="myProg")
subparsers = parser.add_subparsers(title="actions")

parser.add_argument("-v", "--verbose",
                    action="store_true",
                    dest="VERBOSE",
                    help="run in verbose mode")

parser_create = subparsers.add_parser ("create", 
                                        help = "create the orbix environment")
parser_create.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")

# Update
parser_update = subparsers.add_parser ("update", 
                                        help = "update the orbix environment")
parser_update.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")

Comme vous pouvez le voir, le add_arument ("-p") est répété deux fois. J'ai en fait beaucoup plus de sous-analyseurs. Existe-t-il un moyen de parcourir les sous-analyseurs existants afin d'éviter les répétitions ?

Pour info, j'utilise Python 2.7

19voto

JanK Points 135

Vous pouvez également parcourir les sous-analyseurs et ajouter la même option à tous.

 parser = argparse.ArgumentParser(prog="myProg")
subparsers = parser.add_subparsers(title="actions")
parser.add_argument("-v", "--verbose",
                    action="store_true",
                    dest="VERBOSE",
                    help="run in verbose mode")

parser_create = subparsers.add_parser ("create", 
                                        help = "create the orbix environment")
parser_update = subparsers.add_parser ("update", 
                                        help = "update the orbix environment")

for subparser in [parser_create, parser_update]:
    subparser.add_argument ("-p", 
                            type = int, 
                            required = True, 
                            help = "set db parameter")

10voto

Gerard Kool Points 89

Vous pouvez parcourir vos sous-analyseurs de la manière suivante.

 for name, subp in subparsers.choices.items():
    print(subp)
    subp.add_argument(dest='g', help='Input for g variable', default=7, type=int)

Notez qu'en utilisant subparsers.choices , vous évitez d'avoir à coder en dur tous les sous-parseurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X