Как передать ручку te lnet in python из одного класса в другой - PullRequest
0 голосов
/ 04 марта 2020

Я создаю тэг lnet в одном методе класса. Теперь, если я передаю этот хэндл другому методу того же класса и пытаюсь выполнить команды, он не работает. Evrytime я должен подключиться перед выполнением команды из других методов. Любой способ передать дескриптор и использовать его без установления нового соединения

import telnetlib
import time
import re
import os


class Tel():


    def __init__(self)
        print("inside __init__ of Tel class")
        self.HOST = "ABC"
        self.username = "xyz"
        self.password = "XYZ"
        self.port = "20"

    def open_telnet(self):
        print("Connecting Telnet connection to", self.HOST, "at port", self.port)
        try:
            self.net = telnetlib.Telnet(self.HOST, self.port)
            print("Connected to telnet")
        except:
            print("The telnet conection to",self.HOST,"failed")

        return self.net

    def sendcmd(ne,obj, command):
        cmdoutput = 0
        if obj == None :
            print ("objecy is none IIII")
            obj = ne.open_telnet()
        try:
            obj.write(command.encode('ascii') + b"\n")
        except:
            print("Not connected")
        print(obj.read_until(b"+> ", 10).decode('ascii'))
        print(cmdoutput)
        return cmdoutput

ne_obj = Tel()
iim = ne_obj.open_telnet()
cmdoutput = ne_obj.sendcmd(iim,"help all") 
print(cmdoutput)

ТАК, я передаю объект "iim" te lnet методу sendcmd, но кажется, что он не может выполнить команду , Когда я вызываю метод open_te lnet внутри метода sendcmd и получаю объект этого вызова, тогда он работает. Но я не хочу этого делать, я хочу подключиться один раз и использовать этот объект для других команд. Пожалуйста, предложите мне что-нибудь вроде

1 Ответ

0 голосов
/ 04 марта 2020

Вам вообще не нужна функция open_telnet, объект te lnet уже сохранен как атрибут в вашем экземпляре класса с именем net. так что просто используйте экземпляр класса, чтобы использовать объект te lnet

import telnetlib

class Tel:
    def __init__(self):
        print("inside __init__ of Tel class")
        self.HOST = "towel.blinkenlights.nl"
        self.username = "xyz"
        self.password = "XYZ"
        self.port = "23"
        self.net = telnetlib.Telnet(self.HOST, self.port)

    def sendcmd(self, command):
        self.net.write(command.encode('ascii') + b"\n")
        response = [text.strip() for text in self.net.read_until(b")", 10).decode('ascii').splitlines()]
        return response

ne_obj = Tel()
cmdoutput = ne_obj.sendcmd("help all")
print(cmdoutput)

OUTPUT

inside __init__ of Tel class
['\x1b[H\x1b[J\x1b[H', '', '', '', '', '', '', 'Original Work   : Simon Jansen ( http://www.asciimation.co.nz/ )']
...