Отличительные аргументы подпункта - PullRequest
1 голос
/ 17 февраля 2012

Хорошо, так что если у меня есть такой парсер,

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

Если я использую args.name (), что он мне даст?Как я могу указать, какое имя я на самом деле хочу?args.animal.name ()?Я не уверен, пожалуйста, помогите.И, кстати, я не поддерживаю убийство животных, у меня просто не было много творческих примеров, о которых я мог подумать.

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Использовать 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)

Беговые урожаи

% 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% 
0 голосов
/ 01 июля 2014

Как видно из документации , существует аргумент dest для add_subparsers(). Этот аргумент указывает, в каком имени переменной подпапера должна храниться.

Если вы используете в своем коде:

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

Затем, после анализа аргументов, вы можете использовать их как:

if args.parser_name == 'who':
    pass
elif args.parser_name == 'what':
    pass
...