Python Telnetlib在cygwin或putty不可用时获取不可读字符

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

我发现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 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
在这里很有帮助,因为它显示了字符串中的实际内容。您也可以获取。

谢谢,您的回答确实帮助我解决了这个问题,这个问题困扰了我很长时间。