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.