usage parser mutually metavar float exclusive example argumentparser argument python command-line argparse

python - parser - Obtener el subcomando seleccionado con argparse



parser python example (2)

Cuando uso subcomandos con python argparse, puedo obtener los argumentos seleccionados.

parser = argparse.ArgumentParser() parser.add_argument(''-g'', ''--global'') subparsers = parser.add_subparsers() foo_parser = subparsers.add_parser(''foo'') foo_parser.add_argument(''-c'', ''--count'') bar_parser = subparsers.add_parser(''bar'') args = parser.parse_args([''-g, ''xyz'', ''foo'', ''--count'', ''42'']) # args => Namespace(global=''xyz'', count=''42'')

Entonces args no contiene ''foo'' . Simplemente escribir sys.argv[1] no funciona debido a los posibles argumentos globales. ¿Cómo puedo obtener el subcomando?


Aquí hay un ejemplo de diseño de función de tarea simple.

import argparse def task_a(alpha): print(''task a'', alpha) def task_b(beta, gamma): print(''task b'', beta, gamma) if __name__ == ''__main__'': parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest=''subparser'') parser_a = subparsers.add_parser(''task_a'') parser_a.add_argument( ''-a'', ''--alpha'', dest=''alpha'', help=''Alpha description'') parser_b = subparsers.add_parser(''task_b'') parser_b.add_argument( ''-b'', ''--beta'', dest=''beta'', help=''Beta description'') parser_b.add_argument( ''-g'', ''--gamma'', dest=''gamma'', default=42, help=''Gamma description'') kwargs = vars(parser.parse_args()) globals()[kwargs.pop(''subparser'')](**kwargs)


La parte inferior de los documentos de Python en los sub-comandos argparse explica cómo hacer esto:

>>> parser = argparse.ArgumentParser() >>> parser.add_argument(''-g'', ''--global'') >>> subparsers = parser.add_subparsers(dest="subparser_name") # this line changed >>> foo_parser = subparsers.add_parser(''foo'') >>> foo_parser.add_argument(''-c'', ''--count'') >>> bar_parser = subparsers.add_parser(''bar'') >>> args = parser.parse_args([''-g'', ''xyz'', ''foo'', ''--count'', ''42'']) >>> args Namespace(count=''42'', global=''xyz'', subparser_name=''foo'')

También puede usar el método set_defaults() que se hace referencia justo arriba del ejemplo que encontré.