python::argparse: ¿Cómo imprimir la ayuda nivel por nivel?
Tengo un programa de línea de comandos multinivel como ‘git’.
my_cli servicio acción — opciones
Quiero mostrar el mensaje de ayuda nivel por nivel, Y no quiero que el usuario escriba explícitamente “-h” o “–help”.
Por ejemplo,
$ my_cli <== mostrar ayuda para todos los servicios
$ my_cli service1 <== mostrar ayuda solo para service1
$ my_cli service1 action1 <== mostrar ayuda solo para service1/action1
El código se ve así.
import argparse
argument_parser = argparse.ArgumentParser(description="mi_cli")
root_parsers = argument_parser.add_subparsers(title="service", dest="service")
service1_parsers = root_parsers.add_parser("service1", help="service1").add_subparsers(title="action", dest="action")
service2_parsers = root_parsers.add_parser("service2", help="service2").add_subparsers(title="action", dest="action")
service1_action1_parser = service1_parsers.add_parser("action1", help="action1")
service1_action1_parser.add_argument("-a", "--address", required=True, help="dirección o nombre del servidor")
...
args = argument_parser.parse_args()
if (args.service is None):
argument_parser.print_help()
exit(1)
elif (args.action is None):
if (args.service == "service1"):
service1_parsers.print_help() <== Esto no funciona.
exit(1)
...
else:
if (args.service == "service1") AND (args.action == "action1"):
service1_action1_parser.print_help() <== Esto no funciona.
exit(1)
...
davy.ai
Para mostrar un mensaje de ayuda nivel por nivel sin requerir que el usuario escriba explícitamente “-h” o “–help”, puede agregar “help” como un subcomando junto con “servicio1” y “servicio2”, luego agregar sub-subcomandos para cada servicio debajo de “help”. De esta manera, puede usar el mismo analizador para cada nivel de mensaje de ayuda, y el usuario simplemente puede escribir “my_cli” o “my_cli help servicio1” para mostrar el mensaje de ayuda relevante.
Aquí hay una versión actualizada del código:
Ahora, ejecutando “my_cli” se listarán los servicios disponibles, y ejecutando “my_cli help servicio1” se mostrará el mensaje de ayuda para servicio1.