次级解析器限制可选参数的数量

时间:2019-04-30 18:18:13

标签: python argparse

我正在使用子解析器,我想限制使用命令行时传递的可选参数的数量。代码如下。

parser_data_management = subparsers.add_parser('dm', help='data management help')
  parser_data_management.set_defaults(which="dm")
  parser_data_management.add_argument('-delete', '--delete', nargs="+", "Delete index, snapshot, or repository. Optional: If deleting an index, specify fields or log type to delete.")
  parser_data_management.add_argument('-close', '--close', nargs="+", "Close index or indices. Optional: specify fields or log type to close.")
  parser_data_management.add_argument('-open', '--open', nargs="+", "Open index or indices")
  parser_data_management.add_argument('-restore', '--restore', nargs="+", "Restore snapshot")
  parser_data_management.add_argument('-save', '--save', nargs="+", "Create snapshot or repository")
  parser_data_management.add_argument('-compress', '--compress', nargs="+", "Shrink index")
  parser_data_management.add_argument('--watcher', '--watcher', nargs="+", "Create a watcher")

根据我的理解,用户可能会在一个命令行调用中添加所有选项,而这是我不希望的。因此,在选择“ dm”选项时,我想限制用户,以便他们只能选择其中一个参数。是否可以通过argparse做到这一点,或者我必须为此创建自己的函数?

1 个答案:

答案 0 :(得分:1)

正如hpaulj在他的评论中所说,您应该通过以下方式使用subparser:

import argparse

parser = argparse.ArgumentParser()

group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-delete', '--delete', action='store_true')
group.add_argument('-close', '--close',action='store_true')

print parser.parse_args()

EDIT =====(使用您的初始示例)

import argparse

def inputparser():
    parser = argparse.ArgumentParser(description='data management help')
    subparsers = parser.add_subparsers()
    parser_data_management = subparsers.add_parser('dm', help='data management help')
    parser_data_management.set_defaults(which="dm")
    group = parser_data_management.add_mutually_exclusive_group(required=True)
    group.add_argument('-delete', '--delete', nargs="+", help="Delete index, snapshot, or repository. Optional: If deleting an index, specify fields or log type to delete.")
    group.add_argument('-close', '--close', nargs="+", help="Close index or indices. Optional: specify fields or log type to close.")
    group.add_argument('-open', '--open', nargs="+", help="Open index or indices")
    group.add_argument('-restore', '--restore', nargs="+", help="Restore snapshot")
    group.add_argument('-save', '--save', nargs="+", help="Create snapshot or repository")
    group.add_argument('-compress', '--compress', nargs="+", help="Shrink index")
    group.add_argument('--watcher', '--watcher', nargs="+", help="Create a watcher")

    print parser_data_management.parse_args()
inputparser()

没有组定义中的(required = True),这将强制您仅使用其中一个参数。不需要任何参数= True,否则将导致错误。