Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2016 16:05:50

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Telnetlib и threading (поток)

Добрый день!
С огромными промежутками встречаюсь с скриптованием. Мало в голове полезной информации.
Хочу разобраться с запуском telnet-сессий в потоках. Но возникла проблема в пролете этих сессий - не отрабатывают.

 #!/usr/bin/python
# -*- coding: utf-8 -*- 
import telnetlib
import threading
import sys
import os
import getpass
import time
#import ipdb; # отладчик
#ipdb.set_trace()
#user     = raw_input("    Input your username: ")
#password = getpass.getpass("    Input your password: ")
user = 'admin'
password = 'admin'
def _telnet(host):
    tn  = telnetlib.Telnet(host,23,5)
    
    sys.stdout.write("Begin!!!\n")
    sys.stdout.write("\n")
    
    tn.read_until('Login',1)
    tn.write(user+"\r\n")
    
    tn.read_until('Password',1)
    tn.write(password+"\r\n")
    
    tn.write("show version | inc Ser\r\n")
    
    var = tn.read_until('kostil',1)
    time.sleep(1.5)
    
    tn.close()
    time.sleep(2)
tn_1 = threading.Thread(target=_telnet, args=('192.168.0.1',))
tn_1.daemon = True
#ipdb.set_trace()
tn_1.start()

Здесь я приадтачиваю к потоку функцию через вызов функции (через класс не пробовал).
Если включаю отладку, то при выполнении функции произходит зависание в точке с
 var = tn.read_until('kostil',1)
Так я криво, по таймеру, считываю все данные: по другому не знаю как, находил через цикл, который мониторит буфер и плюсует новые символы… но как-то дико это выглядело и у меня плохо работало.
В итоге на экран выводится все, что успелео “прилететь”. После этого скрипт опять зависает. Хотя telnet сессия должна закрываться. Помагает принудителтное завершение.

Итог: при запуске скрипта на экран ничего не выводится, пролетает без всяких ошибок; при отладке зависает в конце функции.

В перспективе хочется пачками (по группам через потоки) делать обход сетевыйх устройств (много).

Отредактировано Dezex (Сен. 13, 2016 16:07:19)

Офлайн

#2 Сен. 19, 2016 11:29:35

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Telnetlib и threading (поток)

Ребят мож вы конечно и ответели устно, но лучше напишите

Офлайн

#3 Окт. 18, 2016 10:05:10

Dezex
Зарегистрирован: 2015-12-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Telnetlib и threading (поток)

Вызов через класс заработал

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version