我想这一定很简单,但我不明白。
假设我有以下arparse解析器:
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')
我如何识别使用了哪个子解析器?呼叫:
print parser.parse_args(["all"])
为我提供了一个空的名称空间:
Namespace()
发布于 2011-11-24 06:48:44
编辑:请查看这个问题的quornian's answer,它比我的更好,应该是被接受的答案。
根据argparse documentation,parser.parse_args(...)
的结果将“只包含所选择的主解析器和子解析器的属性”。不幸的是,这可能不是确定使用了哪个子解析器的足够信息。文档建议在子解析器上使用set_defaults(...)
方法来解决此问题。
例如,我在您的代码中添加了对set_defaults()
的调用:
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')
现在,如果您运行
print parser.parse_args(["all"])
结果是
Namespace(which='all')
有关更多信息和另一个示例,请查看add_subparsers()
文档。
发布于 2012-02-15 09:08:56
一个更简单的解决方案是在add_subparsers
调用中添加dest
。这被隐藏在documentation中更深的地方
...如果有必要检查所调用的子解析器的名称,则add_subparsers()调用的dest关键字参数将起作用
在您的示例中,替换:
subparsers = parser.add_subparsers(help='commands')
通过以下方式:
subparsers = parser.add_subparsers(help='commands', dest='command')
现在,如果您运行:
print parser.parse_args(["all"])
你会得到
Namespace(command='all')
https://stackoverflow.com/questions/8250010
复制相似问题