usage metavar float example argumentparser argument python argparse

metavar - argparse python example



argparse: identificar qué subparser se utilizó (2)

Una solución más simple es agregar dest a la llamada add_subparsers . Esto está enterrado un poco más abajo en la add_subparsers() :

[...] Si es necesario verificar el nombre del subparser que se invocó, el argumento de la palabra clave dest para la llamada add_subparsers () funcionará

En tu ejemplo, reemplaza:

subparsers = parser.add_subparsers(help=''commands'')

con:

subparsers = parser.add_subparsers(help=''commands'', dest=''command'')

Ahora si corres:

print parser.parse_args(["all"])

conseguirás

Namespace(command=''all'')

Esta pregunta ya tiene una respuesta aquí:

Creo que esto debe ser fácil, pero no lo entiendo.

Supongamos que tengo el siguiente analizador arparse:

import argparse parser = argparse.ArgumentParser( version=''pyargparsetest 1.0'' ) subparsers = parser.add_subparsers(help=''commands'') # all all_parser = subparsers.add_parser(''all'', help=''process all apps'') # app app_parser = subparsers.add_parser(''app'', help=''process a single app'') app_parser.add_argument(''appname'', action=''store'', help=''name of app to process'')

¿Cómo puedo identificar, qué subparser fue utilizado? vocación:

print parser.parse_args(["all"])

me da un espacio de nombre vacío:

Namespace()


Editar: Consulte la respuesta de quornian a esta pregunta, que es mejor que la mía y debería ser la respuesta aceptada.

De acuerdo con la documentación de argparse, el resultado de parser.parse_args(...) "solo contendrá atributos para el analizador principal y el analizador secundario que se seleccionó". Desafortunadamente, esta información puede no ser suficiente para determinar qué sub-analizador se utilizó. La documentación recomienda utilizar el set_defaults(...) en el analizador secundario para resolver este problema.

Por ejemplo, agregué llamadas a set_defaults() a su código:

import argparse parser = argparse.ArgumentParser( version=''pyargparsetest 1.0'' ) subparsers = parser.add_subparsers(help=''commands'') # all all_parser = subparsers.add_parser(''all'', help=''process all apps'') all_parser.set_defaults(which=''all'') # app app_parser = subparsers.add_parser(''app'', help=''process a single app'') app_parser.add_argument(''appname'', action=''store'', help=''name of app to process'') app_parser.set_defaults(which=''app'')

Ahora si corres

print parser.parse_args(["all"])

El resultado es

Namespace(which=''all'')

Consulte la documentación de add_subparsers() para obtener más información y otro ejemplo.