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é.