介绍

cliff 框架旨在用于创建多级命令,例如 subversion 和 git,其中主程序处理一些基本的参数解析,然后调用子命令来完成工作。

命令插件

Cliff 利用 Python 动态加载代码的能力,允许主程序的子命令独立于主程序进行实现、打包和分发。这种组织方式为用户提供了统一的命令视图,同时让开发者有机会以他们认为合适的方式组织源代码。

Cliff 对象

Cliff 围绕五个对象组织,这些对象结合起来可以创建一个有用的命令行程序。

应用程序

一个 cliff.app.App 是您从 shell 命令提示符运行的主程序。它负责适用于所有命令的全局操作,例如配置日志记录和设置 I/O 流。

命令管理器

cliff.commandmanager.CommandManager 知道如何加载单个命令插件。默认实现使用 入口点,但可以通过在实例化 App 时替换默认 CommandManager 来使用任何加载命令的机制。

命令

cliff.command.Command 类是实际工作发生的地方。其余框架用于帮助用户发现命令插件并调用它们,并为这些插件提供运行时支持。每个 Command 子类负责根据用户的指示采取行动。它定义了自己的本地参数解析器(通常使用 argparse)和一个 take_action() 方法,该方法执行适当的工作。

命令钩子

cliff.hooks.CommandHook 类可以通过修改可用的命令行参数来扩展 Command,例如添加驱动程序使用的选项。每个 CommandHook 子类必须实现由基类定义的完整钩子 API。扩展应使用基于应用程序命名空间和命令名称的入口点命名空间进行注册

application_namespace + '.' + command_name.replace(' ', '_')

交互式应用程序

主程序使用 cliff.interactive.InteractiveApp 实例提供一个命令 shell 模式,用户可以在程序退出之前键入多个命令。许多基于 cliff 的应用程序将能够使用默认的 InteractiveApp 实现而无需对其进行子类化。