Domanda

Ok, quindi se ho un parser come questo

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()

Se uso args.name (), che cosa sta andando a darmi? Come faccio a specificare il cui nome in realtà ho voglia? args.animal.name ()? Io sono sicuro, aiuto per favore. E tra l'altro non mi sostenere uccidere gli animali solo che non ho avuto molti esempio creativa mi veniva in mente.

È stato utile?

Soluzione

set_defaults :

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)

rendimenti in corso

% 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% 

Altri suggerimenti

Come si può vedere nel , c'è dest argomento di add_subparsers(). Questo argomento dice in cui il nome variabile della subparser deve essere conservato.

Se si utilizza nel codice:

subexample = example.add_subparsers(dest='parser_name')

Poi, dopo l'analisi argomenti è possibile utilizzarli come:

if args.parser_name == 'who':
    pass
elif args.parser_name == 'what':
    pass
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top