我正在使用子解析器,我想限制使用命令行时传递的可选参数的数量。代码如下。
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做到这一点,或者我必须为此创建自己的函数?
答案 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,否则将导致错误。