Найти - Пользователи
Полная версия: Python и сетевое оборудование
Начало » Network » Python и сетевое оборудование
1 2
chipset
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import telnetlib
def connect():
    user ="user"
    password ="pass"
    host = '172.29.114.141'
    tn = telnetlib.Telnet(host,23,15)
    tn.set_debuglevel(1)
    tn.read_until("Login:",5)
    tn.write(user+"\n")
    tn.read_until("Password:",5)
    tn.write(password+"\n")
    tn.read_until(">",5)
    tn.write("ena\n")
    tn.read_until("Password:",5)
    tn.write(user+"\n")
    tn.write("sh ver\n")
    tn.write("q\n")
    print tn.read_all()
    tn.close()
connect()
Хотел разбить на отдельные функции:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import telnetlib
def connect():
    user ="user"
    password ="pass"
    host = '172.29.114.141'
    tn = telnetlib.Telnet(host,23,15)
    tn.set_debuglevel(1)
    tn.read_until("Login:",5)
    tn.write(user+"\n")
    tn.read_until("Password:",5)
    tn.write(password+"\n")
    tn.read_until(">",5)
    tn.write("ena\n")
    tn.read_until("Password:",5)
    tn.write(user+"\n")
#    tn.write("sh ver\n")
#    tn.write("q\n")
    print tn.read_all()
#    tn.close()
def comand():
    tn.write("sh ver\n")
    tn.write("sh inter port\n")
    print tn.read_all()
def disconnect():
    tn.close()
connect()
comand()
disconnect()
Так уже не работает. Подскажите как правильно открыть телнет сессию и дальше второй функцией выполнять команды уже в ней. И затем 3 функция которая сделает еще один телнет уже с этого устройства. Как сделать тоже самое едино без функций понятно.
ajib6ept
Проблема в области видимости.
В функции connect() вы создали объект tn = telnetlib.Telnet(host,23,15) , а другие функции уже его не видят. Попробуйте вот так

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import telnetlib
def connect():
    user ="user"
    password ="pass"
    host = '172.29.114.141'
    tn = telnetlib.Telnet(host,23,15)
    tn.set_debuglevel(1)
    tn.read_until("Login:",5)
    tn.write(user+"\n")
    tn.read_until("Password:",5)
    tn.write(password+"\n")
    tn.read_until(">",5)
    tn.write("ena\n")
    tn.read_until("Password:",5)
    tn.write(user+"\n")
#    tn.write("sh ver\n")
#    tn.write("q\n")
    print tn.read_all()
    return tn
#    tn.close()
def comand(tn):
    tn.write("sh ver\n")
    tn.write("sh inter port\n")
    print tn.read_all()
def disconnect(tn):
    tn.close()
tl = connect()
comand(tl)
disconnect(tl)
chipset
Так тоже не помогло:
 ./test.py
Traceback (most recent call last):
  File "./test.py", line 31, in <module>
    tl = connect()
  File "./test.py", line 22, in connect
    print tn.read_all()
  File "/usr/lib/python2.6/telnetlib.py", line 325, in read_all
    self.fill_rawq()
  File "/usr/lib/python2.6/telnetlib.py", line 516, in fill_rawq
    buf = self.sock.recv(50)
socket.timeout: timed out
PooH
chipset
Так тоже не помогло:
У вас железка недоступна. Соединение по тайм-ауту закрылось.
chipset
Железка доступна первый вариант без функций по прежнему работает.
chipset
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import telnetlib
def connect():
    user ="user"
    password ="pass"
    host = '172.29.114.141'
    tn = telnetlib.Telnet(host,23,15)
    tn.set_debuglevel(1)
    tn.read_until("Login:",5)
    tn.write(user+"\n")
    tn.read_until("Password:",5)
    tn.write(password+"\n")
    tn.read_until(">",5)
    tn.write("ena\n")
    tn.read_until("Password:",5)
    tn.write(user+"\n")
#    tn.write("sh ver\n")
#    tn.write("q\n")
#    print tn.read_all()
    return tn
#    tn.close()
def comand(tn):
    tn.write("sh ver\n")
    tn.write("sh inter port\n")
#    print tn.read_all()
def disconnect(tn):
    tn.close()
    print tn.read_all()
tl = connect()
comand(tl)
disconnect(tl)

Поправил так ошибок уже нет. Но выдает результат пустую строку.
agalen
Есть разница между:
    print tn.read_all()
    tn.close()
и
    tn.close()
    print tn.read_all()
chipset
При таком варианте
print tn.read_all()
    tn.close()
возникают ошибки:
./raisecom.py 
Traceback (most recent call last):
  File "./test.py", line 35, in <module>
    disconnect(tn)
  File "./test.py", line 30, in disconnect
    print tl.read_all()
  File "/usr/lib/python2.6/telnetlib.py", line 325, in read_all
    self.fill_rawq()
  File "/usr/lib/python2.6/telnetlib.py", line 516, in fill_rawq
    buf = self.sock.recv(50)
socket.timeout: timed out
И оборудование при этом доступно. Если раскоментировано tn.set_debuglevel(1) то видно что отрабатывает скрипт. Не отрабатывает чтение print tn.read_all()
agalen
tn.read_all() ожидает, что сервер сам закроет соединение.
Попробуй как-нибудь так:
def comand(tn):
    tn.write("sh ver\n")
    tn.write("sh inter port\n")
    tn.write("q\n")
chipset
Вот так все норм. Спасибо.
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