gpt4 book ai didi

python - 不同子解析器中的常见位置参数

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

我正在尝试使用 argparse 创建一个解析器,它可以解析以下命令:

python prog.py update <DOMAIN> <ENVIRONMENT>
python prog.py pull <DOMAIN> <ENVIRONMENT>
python prog.py release <DOMAIN> <ENVIRONMENT>

如您所见,updatepullrelease 都采用相同的参数 <DOMAIN><ENVIRONMENT> .

这三个都是主解析器的子解析器。

我写了以下内容:

import argparse
# create the top-level parser
parser = argparse.ArgumentParser(prog='PROG', add_help=False)
parser.add_argument('domain', type=str, help='domain help')
parser.add_argument('environment', type=str, help='environment help')

#subparsers
subparsers = parser.add_subparsers(help='sub-command help', parents=[parser])
parser_pull = subparsers.add_parser('pull', help='pull help')
parser_update = subparsers.add_parser('update', help='update help')
print parser_pull.parse_args(['pull', 'WEBAPPS', 'DEV'])
print parser.parse_args(['update', 'WEBAPPS', 'DEV'])

但似乎 domainenvironment 应该在子命令 <​​strong>update、pull 之前释放,所以它会抛出一个错误。

我怎样才能要求在子命令之后接受这些参数,而不在每个子命令中重复代码?

郑重声明,我使用的是 Python 2.7。

最佳答案

继续并复制代码。一点点剪切和粘贴并没有那么多工作。

必须按特定顺序给出位置参数。并且 .add_subparsers 创建了其中一个位置(一个期望像'pull','update'这样的值。所以 subparse 命令的顺序,为主解析器定义的位置,以及为子解析器定义的位置很重要.

有一个parents机制,可以省去一些输入。但我对推荐它犹豫不决,因为它可能会导致问题(之前的 SO 问题证明了这一点)。简单地咬紧牙关并在预期的位置输入位置参数是最可靠的方法。

不要忘记您可以在循环中或使用辅助函数创建子解析器 - 为另一种保存一种类型。

例如,在创建子解析器之后:

for p in parser_pull, parser_update:
p.add_argument('domain', type=str, help='domain help')
p.add_argument('environment', type=str, help='environment help')

关于python - 不同子解析器中的常见位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34681796/

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