parseargs parse multiple metavar example add_argument python argparse

parse - python flags example



Argumentos argparse anidando (1)

En lugar de tener las opciones -a y -u , puede hacer que sean subcomandos. Luego, haga que --web-port una opción del subcomando add :

python my_script.py add name --web_port=XXXX python my_script.py upgrade name

Algo como:

parser = argparse.ArgumentParser(description=''Deployment tool'') subparsers = parser.add_subparsers() add_p = subparsers.add_parser(''add'') add_p.add_argument("name") add_p.add_argument("--web_port") ... upg_p = subparsers.add_parser(''upgrade'') upg_p.add_argument("name") ...

Si intentas correr

my_script.py upgrade name --web_port=1234

obtendrá un error para el argumento no reconocido "--web_port".

Del mismo modo, si lo intentas.

my_script.py add name upgrade

obtendrá un error para el argumento "actualización" no reconocido, ya que solo definió un único argumento posicional para el subcomando ''agregar''.

En otras palabras, los subcomandos se excluyen mutuamente de manera implícita. La única verruga pequeña es que necesita agregar el parámetro posicional "nombre" a cada subparser.

Tengo un código siguiente en python:

parser = argparse.ArgumentParser(description=''Deployment tool'') group = parser.add_mutually_exclusive_group() group.add_argument(''-a'', ''--add'', dest=''name_to_add'', help=''Add a new group or a role to existing group'') group.add_argument(''-u'', ''--upgrade'', dest=''name_to_upgrade'', help=''Upgrade a group with the new version'') parser.add_argument(''--web_port'', help=''Port of the WEB instance that is being added to the group'')

Mi problema es con la opción "--web_port". Quiero poder agregar esta opción solo con la opción "-a" pero no con "-u".

Quiero poder ejecutar: "python my_script.py -a name --web_port = XXXX".

No quiero poder ejecutar: "python my_script.py -u name --web_port = XXXX"

¿Cómo debo cambiar mi código para poder ejecutarlo de esta manera?

Gracias, Arshavski Alexander.