0

我发现 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 的应用程序远程登录到服务器时,我得到的结果相当好,整洁,没有奇怪的字符。下面是我使用 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
4

1 回答 1

1

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

您可能会得到转义字节 ( 0x1b),但它正在以某种方式被过滤。repr在这里有所帮助,因为它向您展示了字符串中的实际内容。您也可以获得常见转义序列的列表

于 2014-03-03T07:55:27.747 回答