首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >argparse:确定使用了哪个子解析器

argparse:确定使用了哪个子解析器
EN

Stack Overflow用户
提问于 2011-11-24 06:33:52
回答 2查看 48.8K关注 0票数 188

我想这一定很简单,但我不明白。

假设我有以下arparse解析器:

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')

# all
all_parser = subparsers.add_parser('all', help='process all apps')

# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')

我如何识别使用了哪个子解析器?呼叫:

代码语言:javascript
复制
print parser.parse_args(["all"])

为我提供了一个空的名称空间:

代码语言:javascript
复制
Namespace()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-24 06:48:44

编辑:请查看这个问题的quornian's answer,它比我的更好,应该是被接受的答案。

根据argparse documentationparser.parse_args(...)的结果将“只包含所选择的主解析器和子解析器的属性”。不幸的是,这可能不是确定使用了哪个子解析器的足够信息。文档建议在子解析器上使用set_defaults(...)方法来解决此问题。

例如,我在您的代码中添加了对set_defaults()的调用:

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')

# all
all_parser = subparsers.add_parser('all', help='process all apps')
all_parser.set_defaults(which='all')

# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')
app_parser.set_defaults(which='app')

现在,如果您运行

代码语言:javascript
复制
print parser.parse_args(["all"])

结果是

代码语言:javascript
复制
Namespace(which='all')

有关更多信息和另一个示例,请查看add_subparsers()文档。

票数 90
EN

Stack Overflow用户

发布于 2012-02-15 09:08:56

一个更简单的解决方案是在add_subparsers调用中添加dest。这被隐藏在documentation中更深的地方

...如果有必要检查所调用的子解析器的名称,则add_subparsers()调用的dest关键字参数将起作用

在您的示例中,替换:

代码语言:javascript
复制
subparsers = parser.add_subparsers(help='commands')

通过以下方式:

代码语言:javascript
复制
subparsers = parser.add_subparsers(help='commands', dest='command')

现在,如果您运行:

代码语言:javascript
复制
print parser.parse_args(["all"])

你会得到

代码语言:javascript
复制
Namespace(command='all')
票数 355
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8250010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档