Telnetlib变得难以理解,而cygwin或putty则没有

时间:2014-03-03 07:46:25

标签: 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 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

1 个答案:

答案 0 :(得分:1)

那些看起来很像终端转义序列,丢失转义字节(0x1b)。在许多终端中,某些字节序列具有特殊效果,例如更改颜色,移动光标等。例如,\x1b[3;1H表示在VT100或兼容终端上“将光标移动到第3行,第1列”,大多数终端的。 (VT100已经很久了,但许多终端应用程序,如Terminal.app,GNOME终端和xterm,仍然使用这些转义序列。)

您可能正在获取转义字节(0x1b),但它正在以某种方式进行过滤。 repr在这里有帮助,因为它会向您显示字符串中的实际内容。您也可以获得a list of common escape sequences