[Tutor] python telnet

Steven D'Aprano steve at pearwood.info
Sun Oct 23 03:12:47 CEST 2011


Rayon wrote:
> Well  what I am doing is connecting to a telnet session sending some
> commands, exiting and returning some data. 
> What  I would to do is send the commands and return the data without exiting
> the session. 
> I would like to keep the same session and just send commands and return
> data.

Change the work-flow from:

repeatedly:-
   log in
   write data
   log out

to:

log in
repeatedly:
   write data
log out



This is untested, but it should point you in the right direction. For 
brevity, anything unchanged will be left out.


#!/usr/bin/env python
import telnetlib

class hlr_com():
     #get host and command
     def __init__(self):
         """init host and command  """
         self.user_name = '********'
         self.password = '**********'
         self.host = '172.20.50.176'
         self.command = ''
         self._connected = False

     def fix_return(self,hia_return):
         # UNCHANGED FROM YOUR VERSION

     #set host ip address
     def set_host(self,host):
         # UNCHANGED FROM YOUR VERSION

     def connect(self):
         # If already connected, do nothing.
         if self._connected:
             return
         try:
             hlr_tel = telnetlib.Telnet(self.host)
             hlr_tel.read_until('login:')
             hlr_tel.write(self.user_name+"\r")
             hlr_tel.read_until('Password:')
             hlr_tel.write(self.password+"\r")
             self._connected = True
         except Exception,error:
             logs("error",str(err),'null')

     def execute(self, command):
         """execute command"""
         try:
             self._execute_or_fail(command)
         except Exception,error:
             logs("error",str(err),'null')

     def _execute_or_fail(self, command):
         if not self._connected:
             # This is probably the wrong exception type
             raise ValueError('you must connect first')
         # otherwise execute the command
         hlr_tel.read_until('maint at atcaHLRds0 /public/users/maint>')
         hlr_tel.write(command+'\r')

     def end_session(self):
         data = hlr_tel.read_until(
             'maint at atcaHLRds0 /public/users/maint>'
             )
         hlr_tel.write('exit'+'\r')
         data = self.fix_return(data)
         return data

     def logs(self,log_type,log_data,ip_address):
         # UNCHANGED FROM YOUR VERSION



To use it:


instance = hlr_com()
instance.connect()
instance.execute("fe")
instance.execute("fi")
instance.execute("fo")
instance.execute("fum")
instance.end_session()


As I said, untested. Good luck!



-- 
Steven


More information about the Tutor mailing list