首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python诅咒打印终端的颜色转义码

Python诅咒打印终端的颜色转义码
EN

Stack Overflow用户
提问于 2015-06-04 23:17:38
回答 1查看 2.2K关注 0票数 6

我有一个bash脚本,它使用从tput生成的前景和背景转义代码,打印一个漂亮的彩色表。我的诅咒应用程序需要调用这个bash脚本并将输出放到屏幕上。

当我尝试这样做的时候,诅咒会爆炸,堆叠的痕迹以:

代码语言:javascript
复制
File "./dostuff.py", line 38, in print_art
    screen.addstr(y, x_start, line)
TypeError: must be str, not bytes

“行”的意思是:

'\x1b[44m\x1b[30mcard major minor revision runs updated\x1b(B\x1b[m\x1b(B\x1b[m\n'

有什么办法让诅咒解释这些颜色代码吗?我可以用颜色代码对字符串进行任何处理来使诅咒显示出来吗?或者,我必须从bash脚本中删除颜色,然后在python中重新实现着色吗?

编辑:

获取bash输出的命令如下所示:

代码语言:javascript
复制
print_art(subprocess.Popen(["./automount", "backup", "list"], stdout=subprocess.PIPE).communicate()[0])

通过对字节字符串调用decode(),我可以得到用于打印字符串的诅咒,尽管使用的是文字转义序列。除非我收到其他人的消息,否则我将手动解析这些文字转义序列,并将其转换为使用诅咒颜色方法。

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 10:30:00

我尝试从网络复制代码:

代码语言:javascript
复制
#!/bin/python
import curses
screen = curses.initscr()
screen.addstr(0, 0, "This string gets printed at position (0, 0)")
screen.addstr(3, 1, "Try Russian text:
")  # Python 3 required for unicode
screen.addstr(4, 4, "X")
line='\x1b[44m\x1b[30mcard           major  minor  revision  runs  updated\x1b(B\x1b[m\x1b(B\x1b[m\n'
y=10
x_start=5
print( type(x_start) )
print( type(y) )
screen.addstr( y, x_start, line)
screen.addch(5, 5, "Y")
screen.refresh()
curses.napms(3000)
curses.endwin()

样本输出:

代码语言:javascript
复制
$ ./dostuff.py
<class 'int'>
             <class 'int'>
This string gets printed at position (0, 0)


 Try Russian text: Привет
    X
     Y




     ^[[44m^[[30mcard           major  minor  revision  runs  updated^[(B^[[m^[(B^[[m

几秒钟后,更新输出:

代码语言:javascript
复制
$ ./dostuff.py
<class 'int'>
             <class 'int'>

我们可以按Ctrl s和Ctrl Q来停止电流输出。因此,请检查以下变量的类型:

代码语言:javascript
复制
y
x_start
line

如果有任何不匹配之处,请开始使用以下内容:

代码语言:javascript
复制
str(y)
or
str(x_start)
or
str(line)

来处理这些异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30655797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档