目录
Linux颜色控制
方式一:添加sed正则命令
方式二:将输出写入文件再读取
Git颜色控制
使用Python paramiko ssh 获取 git 输出时,出现乱码,实际上是终端输出的ANSI颜色转义字符,用于控制终端颜色展示:
\x1b[?1h\x1b=\r master\x1b[m\r\n
Linux颜色控制
可以通过以下方式删除ANSI颜色转义字符:
方式一:添加sed正则命令
source /etc/profile; git branch | sed -r "s/\x1B\[[0-9;]*[a-zA-Z]//g"
注:以上正则命令 \x1B\[[0-9;]*[a-zA-Z] 通过python正则只能清除部分颜色转移字符,原因不明:
import re
def remove_color_escape_sequences(log_string):
pattern = r'\x1B\[[0-9;]*[a-zA-Z]'
cleaned_string = re.sub(pattern, '', log_string)
return cleaned_string
# 示例用法
log_string = '\x1b[?1h\x1b=\r master\x1b[m\r\n'
cleaned_log_string = remove_color_escape_sequences(log_string)
print([cleaned_log_string])
# 输入:'\x1b[?1h\x1b=\r master\x1b[m\r\n'
# 输出:'\x1b[?1h\x1b=\r master\r\n'
注:因控制台支持ANSI颜色转移字符解析,因此直接打印字符串无法看出其中的ANSI颜色转移字符,可将字符串写入列表查看
方式二:将输出写入文件再读取
source /etc/profile; git branch > log.txt; cat log.txt; rm -rf log.txt
Git颜色控制
git本身也有控制颜色展示的配置,但只能控制颜色部分,头尾的ANSI颜色转义字符并不能去除:
source /etc/profile
# 开启颜色显示
git config --global color.branch auto
git config color.branch auto
# 关闭颜色显示
git config --global color.branch never
git config color.branch never
注:
- 加载source /etc/profile才能生效
- 关闭和开启需要对应,如果使用git config color.branch never命令关闭,则必须使用git config color.branch auto命令开启
对应的输出有2行:
# auto
['\x1b[?1h\x1b=\r* \x1b[32m(HEAD detached at 6e7e42203a)\x1b[m\x1b[m\r\n', '\r\x1b[K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b[?1l\x1b>']
# never
['\x1b[?1h\x1b=\r* (HEAD detached at 6e7e42203a)\x1b[m\r\n', '\r\x1b[K\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b[?1l\x1b>']
ChatGPT真是个好东西!