输出彩色,右对齐文本到终端

时间:2015-08-11 12:32:40

标签: python terminal python-click

我想在终端中输出完全对齐的彩色文本(如pacman(packet manager of the arch linux distribution)的屏幕截图(未着色))pacman text aligned to the right

目前我正在使用format

import shutil
left = "foo"
right = "bar"
width = shutil.get_terminal_size().columns
template = "{left:30}{right:{width}}".format(left=left, right=right, width=width-30)
click.echo(template)
# click.echo works just like print with some additional features

这很好用,直到我通过ANSI转义码添加颜色:

left = click.style("foo", fg="red")
right = click.style("bar", fg="green")
# click.style just adds ANSI codes for colors and bold etc.

看起来像这样:enter image description here

即。右侧不完全右对齐。这是"对",因为right实际上是\\x1b[32mbar\\x1b[0m,其当然具有比bar更长的长度,因此需要更少的空间才能正确对齐。在终端获取文本之前,仅显示bar(带颜色)。

我在python std lib或click中遗漏了什么?或者是否有一个简单的库来处理终端颜色和对齐,可以帮助我?或者这个问题有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

click的文档没有提到对齐(这就是你使用python的内置string类的原因)。您可以通过告诉脚本在调用click.style之前记住字符串的长度,并将差异添加到用于格式调用的宽度来保持当前的接口集。 (如果以文本为中心,这也行不通。)

可能还有其他库,但您可以使用curses界面和filter功能来绘制单行显示。