如何在Python中将彩色文本输出到终端?


当前回答

答案是Python中所有跨平台着色的Colorama。

它支持Python 3.5+以及Python 2.7。

截至2021 1月,这一数字仍保持不变。

示例代码:

from colorama import init as colorama_init
from colorama import Fore
from colorama import Style

colorama_init()

print(f"This is {Fore.GREEN}color{Style.RESET_ALL}!")

屏幕截图示例:

其他回答

在我看来,这是最简单的方法。只要您具有所需颜色的RGB值,这应该可以工作:

def colored(r, g, b, text):
    return f"\033[38;2;{r};{g};{b}m{text}\033[0m"

打印红色文本的示例:

text = 'Hello, World!'
colored_text = colored(255, 0, 0, text)
print(colored_text)

#or

print(colored(255, 0, 0, 'Hello, World!'))

多色文本

text = colored(255, 0, 0, 'Hello, ') + colored(0, 255, 0, 'World')
print(text)

您可以使用curses库的Python实现:curses-字符单元显示的终端处理

此外,运行此程序,您将找到您的盒子:

for i in range(255):
    print i, chr(i)

下面是一个诅咒示例:

import curses

def main(stdscr):
    stdscr.clear()
    if curses.has_colors():
        for i in xrange(1, curses.COLORS):
            curses.init_pair(i, i, curses.COLOR_BLACK)
            stdscr.addstr("COLOR %d! " % i, curses.color_pair(i))
            stdscr.addstr("BOLD! ", curses.color_pair(i) | curses.A_BOLD)
            stdscr.addstr("STANDOUT! ", curses.color_pair(i) | curses.A_STANDOUT)
            stdscr.addstr("UNDERLINE! ", curses.color_pair(i) | curses.A_UNDERLINE)
            stdscr.addstr("BLINK! ", curses.color_pair(i) | curses.A_BLINK)
            stdscr.addstr("DIM! ", curses.color_pair(i) | curses.A_DIM)
            stdscr.addstr("REVERSE! ", curses.color_pair(i) | curses.A_REVERSE)
    stdscr.refresh()
    stdscr.getch()

if __name__ == '__main__':
    print "init..."
    curses.wrapper(main)

sty类似于colorama,但它不那么冗长,支持8位和24位(RGB)颜色,支持所有效果(粗体、下划线等),允许您注册自己的样式,是完全类型和高性能的,支持静音,不干扰全局设置,如sys.stdout,真的很灵活,文档很好,等等。。。

示例:

from sty import fg, bg, ef, rs

foo = fg.red + 'This is red text!' + fg.rs
bar = bg.blue + 'This has a blue background!' + bg.rs
baz = ef.italic + 'This is italic text' + rs.italic
qux = fg(201) + 'This is pink text using 8bit colors' + fg.rs
qui = fg(255, 10, 10) + 'This is red text using 24bit colors.' + fg.rs

# Add custom colors:

from sty import Style, RgbFg

fg.orange = Style(RgbFg(255, 150, 50))

buf = fg.orange + 'Yay, Im orange.' + fg.rs

print(foo, bar, baz, qux, qui, buf, sep='\n')

打印:

演示:

您可以使用任何语言提供的shell转义字符。这些转义字符以ESC字符开头,后跟一些参数。

例如,要在终端中输出红色“Hello,World!”字符串:

echo "\e[31m Hello, World! \e[0m"

或者从Python脚本:

print("\e[31m Hello world \e[0m")

此外,我写了一篇关于Escape序列的文章,这可能会帮助您更好地理解这个机制。