如何从 Python 中的 telnet 查询中读取多行?
How can I read multiple lines from a telnet query in Python?
我正在尝试使用 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 循环以在读入新行和回车 return 后打印每一行:
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 的 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 循环以在读入新行和回车 return 后打印每一行:
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()