1 cliff简介
Cliff(CommandLine Interface Formulation Framework),即命令行接口制定框架。可定义多级命令、输出格式以及其他一些扩展来创建命令行相关项目。Cliff框架中定义的主程序处理参数解析,并调用子命令来完成工作。
Cliff借助Python的优势能够动态的装载代码,允许主程序中用到的子命令分布式的实现,并向用户提供统一的命令行界面,方便开发者组织源码。Neutron提供了命令行模式、交互式模式,正是基于cliff架构实现的。
cliff框架中包括了最基本的四类对象
1 theapplication
Cliff.app.App是cliff框架的主程序,负责参数解析、配置logging、设置I/O流等。
2 theCommandManager
cliff.commandmanager.CommandManager 用于加载子命令,默认是通过setuptools entry points机制实现。
3 theCommand
cliff.command.Command 可通过继承该类实现相应的子命令供主程序调用。
4 theInteractive Application
主程序调用cliff.interactive.InteractiveApp实例向用户提供command-shell模式,用户可输入多个命令。
cliff objects之间的关系
Cliff.app.App类中,初始化函数包括定义self.commandmanager,它是cliff.commandmanager.CommandManager的实例,self.interactive-app-factory,它是cliff.interactive.InteractiveApp的实例。run()函数是主程序入口函数。
输出格式
List命令提供的输出格式:csv, table, value, yaml, json, HTML,使用方法是在命令后面输入:-f 输出格式;Show命令提供的输出格式:table,shell, value, yaml, json, HTML,下面举例介绍各种格式的特点,HTML格式需要安装cliff-tablib,这里不做演示。
Csv格式:
(.venv)$ cliffdemo files -f csv "Name","Size" "build",136 "cliffdemo.log",2690 "Makefile",5569 "source",408 |
Table格式:
(.venv)$ cliffdemo files +---------------+------+ | Name | Size | +---------------+------+ | build | 136 | | cliffdemo.log | 2546 | | Makefile | 5569 | | source | 408 | +---------------+------+ |
Value格式
(.venv)$ cliffdemo files |