2015-10-03 4 views
3

Я пытаюсь открыть telnet-соединение, написать одну строку, а затем распечатать все с сервера telnet в Python. Я предполагаю, что мне не хватает чего-то очевидного, потому что документация кажется довольно понятной и делает то, что, по моему мнению, то же самое, что и в терминале, прекрасно работает.Клиент python telnetlib, похоже, не открывает telnet-соединение с сервером

Вот код Python:

import telnetlib 

telnet = telnetlib.Telnet() 
telnet.open('192.168.1.128', 9801, 10) 
telnet.write("SYSTEM_CAL") 

print(telnet.read_all()) 

Этот раз через 10 секунд/не успешно подключиться к серверу я предполагаю. Вот вывод:

Traceback (most recent call last): 
    File "/Volumes/Work/Scripting/Telnet Test/main.py", line 9, in <module> 
    print(telnet.read_all()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/telnetlib.py", line 385, in read_all 
    self.fill_rawq() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/telnetlib.py", line 576, in fill_rawq 
    buf = self.sock.recv(50) 
socket.timeout: timed out 

На изображении ниже подключаюсь к тому же серверу в терминале, и все работает нормально. В конце я даю команду DISCONNECT, взятую сервером, поэтому соединение закрывается.

Connecting to Telnet server in terminal

ли я что-то отсутствует? Почему это работает в терминале, а не в Python?

ответ

2

Я полагаю, что вы отправляете свою команду слишком рано, и принимающая сторона игнорирует ее. Попробуйте прочитать знамя первым:

print(telnet.read_until("Welcome.")) 
telnet.write("SYSTEM_CAL") 
print(telnet.read_all()) 

EDIT:

Я также отметить, что у вас нет строки оконечного последовательность в конце «SYSTEM_CAL». Я полагаю, что в интерактивном сеансе вы нажимаете ↵ ENTER после ввода «SYSTEM_CAL». Если это так, то вам нужно добавить \n в конце write() вызова:

telnet.write("SYSTEM_CAL\n") 

В зависимости от других факторов, находящихся вне вашего вопроса, то возможно, что вам может понадобиться один из следующих вместо:

telnet.write("SYSTEM_CAL\r") 
telnet.write("SYSTEM_CAL\r\n") 
+0

Я получаю приветственное сообщение, когда я это делаю, но потом оно время. Я не получаю КОМАНДЫ: ОК, которая должна возникнуть в результате записи SYSTEM_CAL – zjuhasz

+0

@createer - Интересно, нужен ли вашему telnet-серверу терминатор линии для обработки команды. См. Недавнее редактирование. –

+0

Да, это было, большое спасибо, сэр! – zjuhasz

Смежные вопросы