这个问题在这里已经有了答案:





Get selected subcommand with argparse

(2 个回答)


7年前关闭。




我认为这一定很容易,但我不明白。

假设我有以下 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()

最佳答案

编辑: 请参阅此问题的 quornian's answer,这比我的好,应该是公认的答案。

根据 argparse documentationparser.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() 文档以获取更多信息和另一个示例。

关于python - argparse:确定使用了哪个子解析器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8250010/

10-12 16:56