区分次级分析论点

时间:2012-02-16 22:14:26

标签: python 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')
animal = subexample.add_parser('what')
animal.add_argument('name')

args = parser.parse_args()

如果我使用args.name(),它会给我什么?如何指定我真正想要的名称? args.animal.name()?我不确定,请帮忙。顺便说一句,我不支持杀死动物,我只是没有很多我能想到的创造性例子。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

正如您在documentation中看到的那样,destadd_subparsers()个参数。 该参数告诉必须存储subparser的变量名。

如果您在代码中使用:

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

然后,在解析参数后,您可以将它们用作:

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