python - 如何从 Python 中的 telnet 查询读取多行?

标签 python telnet python-3.4 telnetlib

我正在尝试使用 Python 的 telnetlib 模块与设备进行通信。我似乎能够建立连接并将查询传递到设备,但是,输出不是我所期望的。

这是我的简化代码:

import telnetlib
import time

HOST = "10.10.10.71"

tn = telnetlib.Telnet(HOST, port=55555, timeout=60)

time.sleep(5)                # Give the processor time to connect

tn.write(b'v' + b'\r\n')     # Get the processor version, using 'v'

print(tn.read_eager().decode('utf-8'))

tn.close()                   # Close the connection

执行这段代码后,终端显示的全是:mpa:? -- 不是我期望的处理器信息。

当我使用 Telnet 客户端时,建立连接后,我会收到 mpa:? 提示,这表明设备已准备好执行我的命令。然后我输入“v”,它应该产生以下格式的输出:

mpa:? v

FIRMWARE CONFIGURATION:
Processor Firmware Type
Build Number
Copyright Info

HARDWARE CONFIGURATION:
Line 1          - xxxx
Line 2          - xxxx
Line 3          - xxxx
...

mpa:?

查询结束后,出现mpa:?提示符,准备执行下一条命令。

代替print(tn.read_eager().decode('utf-8')),我还尝试了print(tn.read_all().decode('utf -8')),但是超时并显示以下错误消息:

Traceback (most recent call last):
File "C:/Python/Telnet_logger_1.py", line 14, in <module>
print(tn.read_all().decode('utf-8'))
File "C:\Python34\lib\telnetlib.py", line 335, in read_all
self.fill_rawq()
File "C:\Python34\lib\telnetlib.py", line 526, in fill_rawq
buf = self.sock.recv(50)
socket.timeout: timed out

有人能够指出我正确的方向,或者让我知道我做错了什么吗?

非常感谢!!

最佳答案

我通过添加一个 while 循环来在读入新行和回车符后打印每一行解决了该问题:

import telnetlib

HOST = "10.10.10.71"

tn = telnetlib.Telnet(HOST, port=55555, timeout=60)

tn.read_until(b"mpa:?")

tn.write(b'v' + b'\n\r')

while True:
    line = tn.read_until(b"\n\r")  # Check for new line and CR
    print(line)
    if (b"mpa:?") in line:   # If last read line is the prompt, end loop
        break

tn.close()

关于python - 如何从 Python 中的 telnet 查询读取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28170861/

相关文章:

authentication - Telnet 自动化与 Expect : Slow authentication?

telnet - 期望脚本可以自动 telnet 登录

python - 如何在不重复代码的情况下打开多个文件

python - PyQt5:带 QAction 的键盘快捷键

python - pandas CSV文件读取不会将数据类型从object转换为int

python - 如何比较Python字典中的相应项目?

python - 制作包含缺失值的 Pandas 数据框中唯一行的频率表

python - 如何执行嵌套的 PyCode 对象

linux - 如何在 perl 脚本中的 telnet 命令提示符下运行命令

python - 仅在 3.x 上发生的 Python 包的 ImportError