区分子解析器参数

发布于 2025-01-06 23:10:18 字数 479 浏览 1 评论 0原文

好吧,如果我有一个像这样的解析器,

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()?我不确定,请帮忙。顺便说一句,我不支持杀害动物,我只是没有想到很多有创意的例子。

Ok so If I have a parser like this

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

If I use args.name(), what is it going to give me? How can I specify which name I actually want? args.animal.name()? I am unsure, please help. And by the way I don't support killing animals I just didn't have many creative example I could think of.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等风也等你 2025-01-13 23:10:18

正如您在 文档 中看到的,有 dest add_subparsers() 参数。
该参数告诉子解析器的变量名必须存储在哪个变量中。

如果您在代码中使用:

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

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

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

As you can see in documentation, there is dest argument to add_subparsers().
This argument tells in which variable name of the subparser must be stored.

If you use in your code:

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

Then, after parsing arguments you can use them as:

if args.parser_name == 'who':
    pass
elif args.parser_name == 'what':
    pass
够钟 2025-01-13 23:10:18

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

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

Running yields

% 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% 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文