Distinguir argumentos de subparrador
Pregunta
Ok, así que si tengo un analizador como este
example = argparse.ArgumentParser(description='main parser')
example.add_argument('Kill')
subexample = example.add_subparsers()
person = subexample.add_parser('who')
person.add_argument('name')
person.add_argument('address')
animal = subexample.add_parser('what')
animal.add_argument('name')
args = parser.parse_args()
Si uso args.name (), ¿qué me va a dar? ¿Cómo puedo especificar qué nombre realmente quiero? args.animal.name ()? No estoy seguro, por favor ayuda. Y por cierto no apoyo a matar animales, simplemente no tenía muchos ejemplo creativo que se me ocurriera.
Solución
Usar Configurar valores predeterminados:
import argparse
example = argparse.ArgumentParser(description='main parser')
example.add_argument('Kill')
subexample = example.add_subparsers()
person = subexample.add_parser('who')
person.add_argument('name')
person.add_argument('address')
person.set_defaults(kind = 'person')
animal = subexample.add_parser('what')
animal.add_argument('name')
animal.set_defaults(kind = 'animal')
args = example.parse_args()
print(args)
Rendimientos de ejecución
% test.py 1 who bar baz
Namespace(Kill='1', address='baz', kind='person', name='bar')
% test.py 1 what foo
Namespace(Kill='1', kind='animal', name='foo')
17:31:52 cyrano@farmer:~/test%
Otros consejos
Como puedes ver en documentación, hay dest
argumentar add_subparsers()
. Este argumento dice en qué nombre variable del subparrador debe almacenarse.
Si usa en su código:
subexample = example.add_subparsers(dest='parser_name')
Luego, después de analizar los argumentos, puede usarlos como:
if args.parser_name == 'who':
pass
elif args.parser_name == 'what':
pass
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow