gpt4 book ai didi

python - Argparse:如何区分解析器和子解析器的参数

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:01 25 4
gpt4 key购买 nike

我想将 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

最佳答案

将您的子解析器的 add_argument 调用更改为:

cmd1_parser.add_argument('--verbose', action='store_true', dest='cmd1_verbose')

这将导致您的第一个示例返回:

~ $ myscript --verbose command1 --verbose
Namespace(cmd1_verbose=True, command='command1', verbose=True)

关于python - Argparse:如何区分解析器和子解析器的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com