跳转到主要内容

Python的ANSI颜色

项目描述

travisci PyPI Package latest release Supported versions Supported implementations Wheel packaging support Test line coverage Test branch coverage

Python的ANSI颜色

为您的字符串添加ANSI颜色和装饰。

使用示例

from __future__ import print_function  # accomodate Python 2
from colors import *

print(color('my string', fg='blue'))
print(color('some text', fg='red', bg='yellow', style='underline'))

color 返回的字符串将包含嵌入的 ANSI代码序列,指定文本颜色和样式。例如,上述代码将打印以下字符串

'\x1b[34mmy string\x1b[0m'
'\x1b[31;43;4msome text\x1b[0m'

您可以使用 fg 参数选择前景(文本)颜色,使用 bg 选择背景颜色,使用 style 选择样式。

您可以选择8种基本的ANSI颜色之一:黑色红色绿色黄色蓝色品红色青色白色,以及一个特殊的默认设置,这通常是特定于显示的,但通常是合理的“无特殊颜色”设置。

还有其他指定颜色的方法。许多设备支持一种256色的特殊方案,这是作为原始ANSI代码对xterm终端模拟器的扩展而开发的。可以从更大的调色板中指定颜色(或灰色),通过int值(0-255)来指定。

查看所有颜色

from __future__ import print_function
from colors import color

for i in range(256):
    print(color('Color #%d' % i, fg=i))

包含的show_colors.py程序是这一想法的扩展版本,可用于探索您的终端或输出设备上的可用颜色和样式组合。

24位颜色和CSS兼容性

现代终端比xterm 256更进一步,通常支持完整的24位RGB颜色方案。您可以通过以下几种方式提供完整的RGB值:

  • 一个包含三个tuplelistint,每个值从0到255(例如(255, 218, 185)),

  • 包含CSS兼容颜色名称的字符串(例如'peachpuff'),

  • 包含CSS风格的十六进制值的字符串(例如'#aaa''#8a2be2'),

  • 包含CSS风格的RGB表示法的字符串(例如'rgb(102,51,153)')。

可以随意混合和匹配这些形式。

print(color('orange on gray', 'orange', 'gray'))
print(color('nice color', 'white', '#8a2be2'))

请注意,在基本ANSI颜色集中定义的任何颜色名称都优先于CSS颜色名称。结合终端并不总是同意哪种精确的蓝色应该被认为是ANSI 蓝色的事实,名称颜色可能会有一些歧义。如果您需要完全的精度,请准确指定RGB颜色。可以使用parse_rgb函数来根据CSS标准确定正确的定义。

注意事项

不幸的是,不能保证每个终端都支持ANSI表面上定义的所有颜色和样式。事实上,大多数实现了一个相当小的子集。颜色比样式更好支持,您可能会得到一些最受欢迎的样式,例如加粗下划线。可能会。

无论支持哪些颜色和样式,都没有保证它们会被准确渲染。即使到今天,自从代码开始标准化以来已经超过50年,终端和输出设备的支持仍然是有限的、碎片化的和零散的。

ANSI代码的演变与今天的历史背景完全不同。互联网和广泛标准化的想法在未来几十年内都还未出现。显示技术分辨率低,颜色在罕见的情况下才会出现,颜色/样式保真度不是主要考虑因素。厂商很少或根本不考虑创建自己的专有代码,以与其他厂商不同的方式实现功能,或者将以前用于其他目的的代码改头换面。实际的ANSI参考材料包括许多短语,例如“几乎从不支持”和“非标准”。

我们今天仍然使用ANSI代码,不是因为它们特别出色,而是因为它们是预网络显示上即使不完全一致也能达成一致的最佳、最标准的方法。即使进入网络时代深处,文本输出仍然是人机交互的重要手段。好消息是:ANSI的颜色和样式规范(在ANSI术语中称为“SGR”或“选择图形渲染”)是整个ANSI中最常用、最遵守的部分。

更多示例

# use some partial functions

from __future__ import print_function # so works on Python 2 and 3 alike
from colors import red, green, blue

print(red('This is red'))
print(green('This is green'))
print(blue('This is blue'))

您可以选择添加背景颜色和/或样式。

print(red('red on blue', bg='blue'))
print(green('green on black', bg='black', style='underline'))

您可以使用多个样式同时使用。用+分隔它们。

print(red('very important', style='bold+underline'))

您还可以指定以下支持的样式之一:粗体虚线斜体下划线闪烁闪烁2负色隐藏删除线。虽然大多数设备只支持少数几种样式,但未支持的样式通常会被忽略,所以造成的唯一伤害就是您的文本可能没有您希望的那样美观和/或格式化。一个好的通用规则是,如果得到了格式化,就享受它,但不要过分依赖它——特别是不要依赖像闪烁(例如突出显示关键数据)或隐藏(例如隐藏数据)这样的样式。很可能会失望。

如果您经常使用某种样式,您可能想创建自己的命名样式

from functools import partial
from colors import color

important = partial(color, fg='red', style='bold+underline'))

print(important('this is very important!'))

实用函数

在处理ANSI样式的文本时,可能需要确定“等效”文本(去除样式)。函数strip_color(s)就做了这件事,从s中移除ANSI代码,返回其“纯文本等效”。

您还可能希望确定字符串的有效长度。如果它包含ANSI代码,内置的len()函数将返回包括这些代码的长度,尽管它们在逻辑上是0长度的。因此,普通的len(s)可能不是您需要的。相比之下,ansilen(s)返回字符串的“有效”长度,仅包括非ANSI字符。ansilen(s)等价于len(strip_color(s))

许可证

colors遵循ISC许可证

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

ansicolors-1.1.8.zip (23.0 kB 查看哈希)

上传时间

构建分布

ansicolors-1.1.8-py2.py3-none-any.whl (13.8 kB 查看哈希)

上传时间 Python 2 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面