Python Telnetlib在cygwin或putty不可用时获取不可读字符
我发现python的telnetlib模块有一个奇怪的问题。当我使用telnetlib访问服务器并尝试获取信息时,它总是显示一些奇怪的字符,我确信这不是编码问题,输出如下所示:Python Telnetlib在cygwin或putty不可用时获取不可读字符,python,cygwin,telnetlib,Python,Cygwin,Telnetlib,我发现python的telnetlib模块有一个奇怪的问题。当我使用telnetlib访问服务器并尝试获取信息时,它总是显示一些奇怪的字符,我确信这不是编码问题,输出如下所示: 1[2J[3;1HPort Type IP1 IP2 IP3 IP4[4;1H 01 Real COM [5;1H 02 Real COM [6;1H 03 Real COM [7;1H 04 Real COM [8;1H
1[2J[3;1HPort Type IP1 IP2 IP3 IP4[4;1H 01 Real COM [5;1H 02 Real COM [6;1H 03 Real COM [7;1H 04 Real COM [8;1H 05 Real COM [9;1H 06 Real COM [10;1H 07 Real COM [11;1H 08 Real COM [12;1H 09 Real COM [13;1H 10 Real COM [14;1H 11 Real COM [15;1H 12 Real COM [16;1H 13 Real COM [17;1H 14 Real COM [18;1H 15 Real COM [19;1H 16 Real COM [20;1H
但是,当我使用一些类似shell的应用程序将telnet连接到服务器时,我得到的是非常好和整洁的,没有奇怪的字符。下面是我使用cygwin得到的结果:
Port Type IP1 IP2 IP3 IP4
01 Real COM Listen
02 Real COM Listen
03 Real COM 147.128.14.147
04 Real COM Listen
05 Real COM Listen
06 Real COM Listen
07 Real COM Listen
08 Real COM Listen
09 Real COM Listen
10 Real COM Listen
11 Real COM Listen
12 Real COM Listen
13 Real COM Listen
14 Real COM Listen
15 Real COM Listen
16 Real COM Listen
有人遇到过同样的问题吗?为什么会发生这种情况?当我使用telnetlib时,如何获得“整洁”的结果
下面是简单的脚本:
import telnetlib
if __name__ == '__main__':
HOST = '10.185.20.2'
tn = telnetlib.Telnet(HOST)
r1 = tn.read_until('selection: ', 5)
print r1
tn.write('8' + '\r\n')
r2 = tn.read_until('selection: ', 5)
print r2
tn.write('1 ' + '\r\n')
r3 = tn.read_until('cancel ...', 5)
print r3
这些看起来很像终端转义序列,转义字节(
0x1b
)缺失。在许多终端中,某些字节序列具有特殊效果,例如更改颜色、移动光标等。例如,\x1b[3;1H
表示在VT100或兼容终端上“将光标移动到第3行第1列”,大多数终端都是这样。(VT100早已过时,但许多终端应用程序,如terminal.app
、GNOME终端和xterm
,仍然使用这些转义序列。)
您可能正在获取转义字节(
0x1b
),但它正在以某种方式被过滤。repr
在这里很有帮助,因为它显示了字符串中的实际内容。您也可以获取。谢谢,您的回答确实帮助我解决了这个问题,这个问题困扰了我很长时间。