我为什么要写[CMDTREE]这个命令行库
CmdTree是一个命令行库,参见 这里
https://github.com/winkidney/cmdtree
轮子满地都是……然而我又再造了一个(自尽
现有的库虽然有各自的设计哲学,却无法满足某些特定的需求:)。
能不能享受click带来的便利的同时,也能获取到argparse的子命令支持呢?
为了不再每次都要重复解决这个问题,复制粘贴代码,我写了CmdTree.
其他的选择:
- click(高层抽象,但不支持子命令,对函数有副作用)
- argparse(完整的低层API,功能全但写起来不自然)
如果有以下业务场景,你大概是这个库的目标用户:)
- 需要分类子命令到不同命令组内,没办法让所有命令扁平化(click无法做到)
- 希望click装饰器不会影响原有的函数调用
- 希望能根据API的描述(比如Path)生成CRUD REST-API 的命令行调用
- 不希望直接使用 argparse 的低层 API ( what a pain!)
- 希望在一个库内能做到click的效果,同时兼容子命令
CmdTree有这些特性
- 为子命令和命令行自动生成而设计
- 使用类click的装饰器写命令行
- 友好的低层 API ,可以用add_commands([“docker”, “run”])这样的方式来添加一个命令,子命令层级会自动处理
- 仅依赖six
- 支持 Python3
- 支持类 click 的 argument type 且可拓展
- 装饰器对函数调用本身没有副作用
这个需求都是来自工作当中,原本只是代码库里的几十行代码,希望以后遇到这样的问题,能够避免之前的重复劳动,所以我动手写了CmdTree。