列表命令

命令行程序中最常见的模式之一是需要打印数据列表。cliff 为此类命令提供了一个基本类,因此它们只需要准备数据,用户就可以从几个输出格式化插件中选择一个,以他们喜欢的格式查看数据列表。

列表器

cliff.lister.Lister 基本类 API 扩展了 Command,以允许 take_action() 返回要使用用户选择的格式化程序格式化的数据。子类应提供一个 take_action() 实现,该实现返回一个包含数据集列名称的元组和一个将产生要输出的数据的可迭代对象的两个成员元组。有关详细信息,请参阅 demoapp 中的 files 命令 的描述。

列表输出格式化程序

cliff 提供了两个用于列表命令的输出格式化程序。Lister 在命令行开关中添加了一个选项,让用户可以指定他们想要的格式化程序,因此您无需在应用程序中进行任何额外的工作。

csv

csv 格式化程序输出逗号分隔值文档。CSV 数据可以导入到数据库或电子表格中以进行进一步操作。

(.venv)$ cliffdemo files -f csv
"Name","Size"
"build",136
"cliffdemo.log",2690
"Makefile",5569
"source",408

table

table 格式化程序使用 PrettyTable 生成适合人类阅读的格式化输出。

(.venv)$ cliffdemo files
+---------------+------+
|      Name     | Size |
+---------------+------+
| build         |  136 |
| cliffdemo.log | 2546 |
| Makefile      | 5569 |
| source        |  408 |
+---------------+------+

value

value 格式化程序生成一个空格分隔的输出,不带标题。

(.venv)$ cliffdemo files -f value
build 136
cliffdemo.log 2690
Makefile 5569
source 408

当您想将输出管道传输到脚本时,此格式非常方便。

(.venv)$ cliffdemo files -f value | while read NAME SIZE
do
  echo $NAME is $SIZE bytes
done
build is 136 bytes
cliffdemo.log is 2690 bytes
Makefile is 5569 bytes
source is 408 bytes

yaml

yaml 格式化程序使用 PyYAML 生成映射的 YAML 序列。

(.venv)$ cliffdemo files -f yaml
- Name: dist
  Size: 4096
- Name: cliffdemo.egg-info
  Size: 4096
- Name: README.rst
  Size: 960
- Name: setup.py
  Size: 1807
- Name: build
  Size: 4096
- Name: cliffdemo
  Size: 4096

json

json 格式化程序生成缩进的 JSON 格式的对象数组。

(.venv)$ cliffdemo files -f json
[
  {
    "Name": "source",
    "Size": 4096
  },
  {
    "Name": "Makefile",
    "Size": 5569
  },
  {
    "Name": "build",
    "Size": 4096
  }
]

其他格式化程序

使用 tablib 生成 HTML 的格式化程序作为 cliff-tablib 的一部分提供。

创建您自己的格式化程序

如果标准格式化程序不能满足您的需求,您可以将另一个格式化程序与您的程序捆绑在一起,方法是从 cliff.formatters.base.ListFormatter 继承并注册 cliff.formatter.list 命名空间中的插件。