2017-01-31 101 views
0

enter image description here处理终端颜色代码(ANSI颜色转义码)

我应该写一个PyQt的应用程序,它可经由UART串行设备进行通信。我将它连接到基于OpenWRT的路由器,当我试图在其上运行'ls'时,输出(请参阅附图)在文件夹名称周围有一些奇怪的字母。我知道这些是某种颜色代码。如何从输出中删除这些或相应地显示颜色。 任何帮助都会有所帮助。

回答

2

LS参见手册页(1),并且命令

$ command -v ls 

在我的Linux系统的输出,即报告

$ command -v ls 
alias ls='ls --color=auto' 

这是一个生活的事实Unix交互式shell不能可靠地确定所连接终端的特性,并且遗憾的是GNU着色对终端无关紧要。当与不需要颜色的设备连接时,最好的方案就是在任何地方出现问题时关闭它。

要测试,一个快速的诀窍是键入“ls”是这样的:

$ \ls 

的介绍反斜杠击败shell的别名机制,并还原为使用裸/usr/bin/ls,或任何你PATH用品。

+0

嘿,谢谢你的回复詹姆斯,我明白你的答案,但我的问题是,这个工具将与许多设备一起使用,其中许多设备我很难预先访问。有像'屏幕'这样的工具能够以某种方式解析信息并相应地显示颜色,我需要能够做到这一点的东西或者一起移除代码。 –

+0

您不需要访问设备。连接后,只需根据您的需求建立您的环境。使用你的shell-fu:** unalias **和** unset **你支持/使用的每一个命令。我真的认为这是你唯一的选择。我怀疑有一个程序会过滤掉ANSI控制序列。这个任务很复杂且不明确:程序必须过滤任何在termcap中定义的设备的控制序列(或其他)。任何声称要这样做的东西都会引入尽可能多的问题。 –