【发布时间】:2015-11-04 11:22:32
【问题描述】:
我可以使用诸如print "\033[31m red text \033[0m" 之类的代码将 ANSI 颜色代码从 python 打印到终端,该代码以红色打印“红色文本”。
但是,在换行时,终端仍然计算不可见的控制字符,因此文本换行不正确,就好像行比实际长一样。反向搜索也很奇怪,显示的文本与光标下的实际内容不匹配。
以下链接(和其他)
https://wiki.archlinux.org/index.php/Color_Bash_Prompt#Regular_user_2 似乎表明我需要在 \[ 和 \] 中包装颜色代码,以便终端可以正确地将光标放在屏幕上。但是,当我在 python 中print "\[\033[31m\]" 时,括号会出现在屏幕上。
如何将\[ 和\] 控制字符从python 发送到终端?
(我发现colored等颜色库也有同样的问题)
【问题讨论】:
-
\[和\]仅在bash中各种PS?变量的值内被解释(并且有用)。在其他情况下,您负责识别和说明打印到终端的不可见字符。 -
@chepner - 这恰好是我使用它的目的,一个像 hg-prompt 这样的工具,用于轻松自定义 bash 提示符。
-
那么您只想按字面意思传递这些字符。显示它们并没有什么特别的作用。在计算
PS1的值的长度时,它是bash,它的计数中不包括它们之间的任何内容。 -
@chepner - 谢谢!这解决了我的问题。我之前尝试过这个,但是在终端中测试了脚本并看到了
\[,并认为它不起作用。但是当我在我的 $PS1 中使用该脚本时,效果很好。
标签: python bash terminal ansi-colors color-codes