【发布时间】:2012-04-25 06:02:42
【问题描述】:
我想将 python-argparse 与参数和位置参数一起使用。假设我在命令行上有我的脚本(这只是一个简单而愚蠢的例子),这是我到目前为止的代码:
#!/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', action='store_true')
subparsers = parser.add_subparsers(help='command', dest='command')
cmd1_parser = subparsers.add_parser('command1')
cmd1_parser.add_argument('--verbose', action='store_true')
args = parser.parse_args()
print args
现在我这样称呼这个脚本:
~ $ myscript --verbose command1 --verbose
Namespace(command='command1', verbose=True)
~ $ myscript command1 --verbose
Namespace(command='command1', verbose=True)
~ $ myscript --verbose command1
Namespace(command='command1', verbose=True)
现在你可以看到我总是得到相同的命名空间对象,并且无法区分详细命令是常规参数还是子解析器参数。 但我需要它来分别处理这些参数。 什么是一种简单的方法(以最少的代码工作)来做到这一点?
编辑:
我在 Python stdlib 问题跟踪器中提交了一个问题: http://bugs.python.org/issue15327
【问题讨论】:
-
子问题:我在哪里为 argparse 提交问题?
-
它在标准库中,所以错误转到bugs.python.org。但是,对于功能请求,您应该使用 python-list 或 python-ideas;见docs.python.org/devguide/communication.html。
-
我认为这是一个很好的问题。似乎子解析器应该(可选地)在命名空间中返回一个命名空间,但显然它们不是那样工作的。此外,我有点惊讶
add_subparsers的 dest 关键字实际上做了一些事情。 (它似乎没有记录在任何地方)