我为什么要写[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。

Last modification:August 14th, 2017 at 10:55 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment