cliff-用于使用多级命令创建命令行程序的python库
cliff框架旨在用于创建多级命令,例如subversion和git,其中主程序处理一些基本参数解析,然后调用子命令来完成工作。
Cliff充分利用了Python动态加载代码的能力,以允许独立于主程序来实现,打包和分发主程序的子命令。该组织为用户提供命令的统一视图,同时为开发人员提供了以他们认为合适的任何方式组织源代码的机会。
命令插件¶
Cliff由五个对象组成,这些对象被组合在一起以创建有用的命令行程序。
cliff.app.App是从shell命令提示符运行的主程序。它负责适用于所有命令的全局操作,例如配置日志记录和设置I / O流。
在cliff.commandmanager.CommandManager知道如何加载单独的命令插件。默认实现使用 入口点,但是可以通过CommandManager实例化时替换默认值来使用任何加载命令的机制App。
cliff.command.Command是真正的工作情况。框架的其余部分用于帮助用户发现命令插件并调用它们,并为这些插件提供运行时支持。每个Command子类负责根据用户的指示采取措施。它定义了自己的局部参数解析器(通常使用argparse)和 take_action()完成相应工作的方法。
cliff.hooks.CommandHook类可以通过修改命令行参数可延伸一个命令,例如添加由驾驶员使用的选项。每个CommandHook子类必须实现由基类定义的完整钩子API。应该使用基于应用程序名称空间和命令名称的入口点名称空间来注册扩展:
application_namespace + '.' + command_name.replace(' ', '_')
主程序使用一个cliff.interactive.InteractiveApp 实例来提供命令外壳模式,在该模式下,用户可以在程序退出之前键入多个命令。许多基于悬崖的应用程序将能够使用默认实现, InteractiveApp而无需对其进行子类化。
下载安装
必须将cliff安装到安装了应用程序和扩展的相同站点包区域中(virtualenv或全局站点包)。您可能需要管理权限才能执行此操作。安装它的最简单方法是使用pip。例如:
$ pip install cliff
示例
cliff源程序包包括一个demoapp目录,该目录包含带有几个命令插件的示例主程序。
主要应用程序定义在main.py: