防止数据打印时终端字符集切换

时间:2013-04-04 14:28:25

标签: python bash raspberry-pi xbee

我正在运行一个控制台应用程序,它可以从房子周围的各种传感器获取数据。有时传输被中断,因此数据包没有意义。当发生这种情况时,数据包的内容将输出到终端会话。 然而,发生的事情是,在输出错误的数据包时,它包含了改变当前终端窗口字符集的字符,将任何文本(除了数字之外)呈现为不可读的乱码。

在保留大部分特殊字符的同时,在显示之前过滤错误数据包的最佳方法是什么?什么序列可以改变终端的行为?

我还想补充一点,除了加扰输出外,应用程序仍然可以正常工作。

3 个答案:

答案 0 :(得分:2)

您的终端可能正在回复ANSI escape codes。 为防止数据无意中影响终端,您可以打印repr数据,而不是数据本身:

例如,

good = 'hello'
bad = '\033[41mRED'

print('{!r}'.format(good))
print('{!r}'.format(bad))

产量

'hello'
'\x1b[41mRED'

print(good)
print(bad)

产量

enter image description here

(顺便说一句,输入reset将重置终端。)

答案 1 :(得分:1)

您可以转换ASCII范围之外的所有字符,这样可以消除任何会改变终端状态的杂散转义序列。

print s.encode('string-escape')

答案 2 :(得分:0)

当您收到数据包时,请在输出之前检查其是否有效。一种可能性是在输出之前检查数据包中的每个字符是否可打印,即在32-127十进制的范围内。或者将校验和添加到数据包中并拒绝任何校验和错误。