Telnet输出解析

时间:2014-08-26 13:00:15

标签: python telnetlib

我现在正尝试在Python 3.4中使用telnetlib。 我想要的只是尝试向我的接入点发送命令并获得一些响应。 我的代码:

`import telnetlib
 import time

 user='admin'
 password='admin'
 host='192.168.1.1'


 try:
    tn=telnetlib.Telnet("host")
    tn.read_until(b"Login: ")
    tn.write(user.encode() + "\r\n".encode())
    tn.read_until(b"Password: ")
    tn.write(password.encode() + "\r\n".encode())
    print("Connection establised")
 except Exception:
    print("Connection failed")

 cmd="interface AccessPoint\r\n"
 tn.write(cmd.encode())
 cmd2="ssid TEST\r\n"
 tn.write(cmd2.encode())

 output=n.read_eager()
 while output:
    print(output.decode())
    time.sleep(.2)
    output=tn.read_eager()

` 例如,此脚本应将SSID的名称更改为TEST。 然后我在Putty做它,没关系: enter image description here

但后来我试图从我的剧本中读取回应,我看到那样的样子:

enter image description here

请告诉我这些符号的含义是什么? 有没有办法从我的日志中删除它们?

P.S。试过所有其他阅读方式,比如read_all。尝试没有decode(),尝试解码('utf-8'),但符号总是在这里。我还应该做什么?

谢谢你,Mairy。

1 个答案:

答案 0 :(得分:1)

您的接入点认为它正在与终端仿真器通信。在现已撤销的标准ANSI X3.64之后,这些符号是所谓的“ANSI转义码”。

字符串Escape - [ - K表示“擦除到行尾”。字符串Escape - [ - 1 - 6 - D表示“将光标向左移动16个空格。”

  • 您可以说服您的接入点它没有与终端仿真器通信,或者它正在与非ANSI终端仿真器通信,或者

  • 您可以使用适当的正则表达式(例如msg = re.sub('\x1b\\[\\d*[A-Z]', '', msg)

  • 从已记录的字符串中删除它们

参考: