不同子解析器中的常见位置参数
Common positional arguments in different subparsers
我正在尝试使用 argparse 创建一个解析器,它可以解析以下命令:
python prog.py update <DOMAIN> <ENVIRONMENT>
python prog.py pull <DOMAIN> <ENVIRONMENT>
python prog.py release <DOMAIN> <ENVIRONMENT>
如您所见,update、pull 和 release 都采用相同的参数<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'])
但似乎 domain 和 environment 应该在子命令 update 之前,pull 和 release,所以会报错。
我怎样才能要求在子命令之后接受这些参数,而不在每个子命令中重复代码?
为了记录,我使用 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')
我正在尝试使用 argparse 创建一个解析器,它可以解析以下命令:
python prog.py update <DOMAIN> <ENVIRONMENT>
python prog.py pull <DOMAIN> <ENVIRONMENT>
python prog.py release <DOMAIN> <ENVIRONMENT>
如您所见,update、pull 和 release 都采用相同的参数<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'])
但似乎 domain 和 environment 应该在子命令 update 之前,pull 和 release,所以会报错。
我怎样才能要求在子命令之后接受这些参数,而不在每个子命令中重复代码?
为了记录,我使用 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')