有时脚本命令需要比较复杂的二级命令,例如说 git add
和 git commit
,有独立的一套参数。而同时对这些命令本身可能也有命令修饰。这时就希望将命令行参数分解成两个部分,得到 (cmd, args)
。其中 cmd
是一级的命令,指示要进行何种操作。args
是这个命令的参数列表,每个项可以是 -
或者 --
开头的选项,也可以其它的。
Python 的 argparse
模块已经想到了这个需求。只需要如下这样做即可:
import argparse
import sys
def get_cmd_args():
ap = argparse.ArgumentParser()
ap.add_argument('cmd')
ap.add_argument('args', nargs=argparse.REMAINDER)
args = ap.parse_args()
return args.cmd, args.args
def main():
cmd, args = get_cmd_args()
print(cmd, args)
main()
选择合适的 cmd
之后,再对剩余的 args
调用 ap.parse_args(args)
,即可做到二级管理。
此外,Google 开源过一个包叫做 fire。提供更便捷的命令行解析。
#! /use/bin/env python3
# This is cli.py
import fire
class Cli:
def cmd1(self, arg1, arg2):
# cmd1 arg1 arg2
pass
def cmd2(self, arg1, opt=1):
# cmd2 arg2 --opt=2
pass
def cmd3(self, *args):
# cmd3 arg1 [arg2 ...]
pass
fire.Fire(Cli)
也可以做到二级命令管理,但显得有些粗放。
网友评论