gpt4 book ai didi

python - 在写入命令中保留颜色

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:51 25 4
gpt4 key购买 nike

我正在使用 write 命令向 friend 发送消息,我制作了一个简单的脚本,将我们提供的文本转换为 ASCII 艺术,如下所示:

ascii.py

import pyfiglet
from termcolor import cprint
import sys,random
f,t = '',''
fonts = list(pyfiglet.FigletFont.getFonts())
if sys.argv[-1] in fonts:
f = sys.argv[-1]
t = sys.argv[1:-1]
else:
f = random.choice(fonts)
t = sys.argv[1:]
cprint(pyfiglet.figlet_format(' '.join(t),str(f)),'red','on_blue',['bold'])
print(t)

然后我使用下面的命令发送消息:

python ascii.py hi graffiti | write neo

当我运行不带管道的运行命令时,即 python ascii.py hi graffiti,我得到以下输出:

enter image description here

但是当我运行 python ascii.py hi graffiti |写 neo ,颜色不会显示,而是显示一些额外的字符,如下所示:

enter image description here

那么我如何保留颜色以便它们到达另一端的人??

最佳答案

Python 并没有移除颜色;他们在那里:这些开始一些格式化

^[[1m^[[44m^[[31m

格式化到此结束

^[[0m

例如,在你的命令行上试试这个

$ printf '\e[1;31mHello, World!\e[0m\n'

您会看到红色的文本,但不是格式化字符。这是因为您的终端已经解释了这些字符。

如果您随后执行此操作,您将看到格式化字符仍然存在。这是因为当终端从写入中获取数据时,它不会解释转义序列。

$ printf '\e[1;31mHello, World!\e[0m\n' | write neo

发生的事情是转义序列 '\e[1;31m' 和 '\e[0m' 被转换成它们相关的字节值。您可以通过对数据进行 hexdump 来查看这一点

$ printf '\e[1;31mHello, World!\e[0m\n' | hexdump
0000000 5b1b 3b31 3133 486d 6c65 6f6c 202c 6f57
0000010 6c72 2164 5b1b 6d30 000a
0000019
$ printf '\\e[1;31mHello, World!\\e[0m\n' | hexdump
0000000 655c 315b 333b 6d31 6548 6c6c 2c6f 5720
0000010 726f 646c 5c21 5b65 6d30 000a
000001b

看到开始和结束字节不同了吗?写入正在接收格式化字节,但打印出它们相关的转义序列。

我不知道为什么 write 不在客户端解释转义字符,但这可能是出于安全考虑(这些转义序列不仅可以更改字体,还可以做更多的事情)。

如果你想要漂亮的颜色,你将无法使用write

关于python - 在写入命令中保留颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com