实现命令行的子命令集,且命令子集绑定动作,费了一些时间,所以记录下来希望能帮助到有需要的人
实现demo
def parse_bigkey_parallel(args):
ana = Analyze(args)
with Pool(parallels) as p:
# p.map(self.test, self.slaves)
p.map(ana.do_parse_bigkey, ana.slaves)
def filter_keys_parallel(args):
ana = Analyze(args)
with Pool(parallels) as p:
p.map(ana.filter_keys, ana.slaves)
if __name__ == '__main__':
parser = argparse.ArgumentParser(prog=None,
usage=None,
epilog=None,
parents=[],
formatter_class=argparse.HelpFormatter,
prefix_chars='-',
fromfile_prefix_chars=None,
argument_default=None,
conflict_handler='error',
add_help=True)
parser.add_argument('--subsystem', '-s', help="源集群子系统名称", required=True)
parser.add_argument('--parallels', '-p', help="任务的并发度,默认3", default=3, type=int)
parser.add_argument('--note', '-n', help="操作原因,用于审计")
subparsers = parser.add_subparsers(help="sub-command help")
# create the parser for the "bigkey" command
parser_bigkey = subparsers.add_parser("bigkey", help="分析大key")
parser_bigkey.add_argument('--bigkey-size', '-b', help="bigkey size KB (default 100)", default=100, type=int)
parser_bigkey.add_argument('--element-num', '-e', help="element-num (default 1000)", default=1000, type=int)
parser_bigkey.set_defaults(func=parse_bigkey_parallel)
# create the parser for the "keys" command
parser_keys = subparsers.add_parser("keys", help="按前缀等条件查询key")
parser_keys.add_argument('--filter', help="filter for grep cmd(regexp)", type=str, required=True)
parser_keys.add_argument('--no-expiry', help="find the key without set expiry time (default true)", type=bool,
default=True, required=True)
parser_keys.set_defaults(func=filter_keys_parallel)
args = parser.parse_args()
subsystem = args.subsystem
cluster_name = subsystem.replace('-', '_')
note = args.note
parallels = int(args.parallels)
# parse the args and call whatever function was selected
args.func(args)
- 设置了两个子命令:bigkey和keys
- bigkey设置了动作函数parse_bigkey_parallel ,参数为args,此参数是在最后通过args.func回调动作函数时传入的
- keys逻辑和bigkey相同
- 最后调用args的func方法回调命令行中指定的子命令的对应动作函数,并传入参数args
使用方法输出格式
usage: redis_analyze.py [-h] --subsystem SUBSYSTEM [--parallels PARALLELS] [--note NOTE] {bigkey,keys} ...
positional arguments:
{bigkey,keys} sub-command help
bigkey 分析大key
keys 按前缀等条件查询key
optional arguments:
-h, --help show this help message and exit
--subsystem SUBSYSTEM, -s SUBSYSTEM
源集群子系统名称
--parallels PARALLELS, -p PARALLELS
任务的并发度,默认3
--note NOTE, -n NOTE 操作原因,用于审计