Я пытаюсь связаться с устройством, использующим модуль telnetlib Python. Кажется, я могу установить соединение и передать свой запрос на устройство, однако вывод не является тем, что я ожидаю.Как я могу прочитать несколько строк из запроса telnet в Python?
Вот мой упрощенный код:
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
После выполнения этого кода, все терминал отображает это: мПа :? - а не информацию о процессоре, которую я ожидал.
Когда я использую клиент 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:?
После того, как запрос, Мпа :? Появится сообщение, готовое к следующей команде.
На месте 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
ли кто-нибудь сможет указать меня в правильном направлении, или дайте мне знать, что я «Неправильно?
Большое спасибо!
Я подозреваю, что вам нужно прочитать 'Мпа:' приглашение, возвращенное устройством, прежде чем вы попытаетесь отправить ему команду. Вы пробовали что-то вроде 'tn.read_until (b" mpa:? ")', Что похоже на пример в [docs] (https://docs.python.org/3/library/telnetlib.html)? –
@ PM2Ring - Спасибо за ваше предложение. Я попытался удалить 'time.sleep (5)' и заменил его на 'tn.read_until (b" mpa:? ")' - я все еще получаю ошибку таймаута, когда я использую tn.read_all(), и когда я использую tn.read_eager(), я не получаю никакого вывода. – skyhammer
Я не уверен, что предложить. У меня только ограниченный опыт работы с telnetlib, но я успешно использовал его (в Python 2.6.) Для связи с моим ADSL-модемом. Поскольку модем всегда завершает свой вывод с помощью командной строки, я использую 'tn.read_until (prompt)' для чтения данных из него. –