Найти - Пользователи
Полная версия: Telnet зависание когда большой ответ
Начало » Python для новичков » Telnet зависание когда большой ответ
1
Wagner
Здравствуйте

имеется вот такой скрипт. задача которого зайти по telnet на железку и слить конфиг

import telnetlib, time
user='root'
password='toor'
host='12.12.12.12'
tn=telnetlib.Telnet(hot)
tn.write(user+“\n”)
tn.write(password+“\n”)
tn.write('show current configuration'+“\n”)
for i in range(300): # поскольку весь конфиг не влезает и в telnet появляется приглашение –more шлем ему пробелы
tn.write(' ‘)

time.sleep(20)
tn.write(’q')
tn.write('quit'+“\n”)
s=tn.read_all() # в этом месте программа зависает .
f=open('config','w')
f.write(s)
f.close()

—————
если сохранять часть конфига например for i in range(200): то программа благополучно выполняется

в интерпритаторе если прервать выполенение программы то выдается что то вроде

In : s=tn.read_all()
^C—————————————————————————
KeyboardInterrupt Traceback (most recent call last)

/home/emil/<ipython console> in <module>()

/usr/lib/python2.5/telnetlib.pyc in read_all(self)
335 self.process_rawq()
336 while not self.eof:
–> 337 self.fill_rawq()
338 self.process_rawq()
339 buf = self.cookedq

/usr/lib/python2.5/telnetlib.pyc in fill_rawq(self)
526 # The buffer size should be fairly small so as to avoid quadratic
527 # behavior in process_rawq() above
–> 528 buf = self.sock.recv(50)
529 self.msg(“recv %r”, buf)
530 self.eof = (not buf)

KeyboardInterrupt:

Подскажите может есть способ сохранения конфига частями, либо запись прочитанной части конфига в фаил ?
Wagner
проблема решена использованием
s=tn.read_very_eager()
tcp
Wagner пример выложить можете ?
Wagner
раб пример вывода конфига в веб на фреймворке django

from django.http import HttpResponse
from django.template.defaultfilters import linebreaksbr

def sbc_get_config(request):
import telnetlib, time
t1=time.ctime()
user='admin'
password='password'
host='192.168.4.33'
tn=telnetlib.Telnet(host)
tn.read_until(“ogin”)
tn.write(user+“\n”)
tn.read_until(“assword”)
tn.write(password+“\n”)
tn.write('dis cur'+“\n”)
#very long config file. don't wont find another way
for i in range(350):
tn.write(' ‘)

time.sleep(10)
tn.write(“\n”)
tn.write(’q')
tn.write('quit'+“\n”)
s=tn.read_very_eager()
f=open('config','w')
f.write(s)
f.close()
sbr = linebreaksbr(s)
return HttpResponse(sbr)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB