Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Ejecutar un comando en el loop de la libreria CMD

Estas en el tema de Ejecutar un comando en el loop de la libreria CMD en el foro de Python en Foros del Web. Buenas gente de Forosweb! esperando que estén bien, vengo por estos a lados a pedir sugerencias de los que mas saben es decir de ustedes ...
  #1 (permalink)  
Antiguo 03/06/2015, 19:39
 
Fecha de Ingreso: junio-2009
Ubicación: House
Mensajes: 38
Antigüedad: 15 años
Puntos: 1
Ejecutar un comando en el loop de la libreria CMD

Buenas gente de Forosweb! esperando que estén bien, vengo por estos a lados a pedir sugerencias de los que mas saben es decir de ustedes , estoy creando una aplicación con la librería paramiko para conectarme a diversos routers y administrarlos, pues ya lo he hecho sin problema alguno gracias a la fantástica librería Paramiko, el problema reside es que quiero tener una pequeña consola para administrar los router, que posea autocompletados, y que cuando use las fecha del teclado, up,down, me traiga los comandos pertinentes como si de nuestra terminal de Linux se tratase xD así que investigue y concluí que la librería que me ayudaría a mi propósito sería cmd, así que me documente un poco y logre realizar la shell, el problema es el siguiente que para poder activar la interacción del router tengo que primero teclear activate, y posteriormente ese método me permite entrar a los comandos del root, mi pregunta es la siguiente a los mas experimentados existe alguna forma de pasar la cadena activate automaticamente para entrar al root directamente a través del loop del cmd? o conocen alguna forma que me podrían sugerir? para los que no les quedo muy claro aquí les dejo el código, gracias de antemano!!!!!
Código Python:
Ver original
  1. import paramiko
  2. import time
  3. import cmd
  4. resp=''
  5.  
  6. class conexionSSH:
  7.     '''Clase para conectarse a través de SSH'''
  8.    
  9.     def __init__(self,server='172.16.0.2',port=22,user='xx',password='xz'):
  10.         '''Constructor de la clase, establece los argumentos para conectarse al servidor'''
  11.         self.server=server
  12.         self.port=22
  13.         self.user=user
  14.         self.password=password
  15.                
  16.     def conectar(self):
  17.           '''Conecta al servidor usando los atributos pasados al constructor'''
  18.           try:
  19.               self.ssh = paramiko.SSHClient()
  20.               self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  21.               self.ssh.connect(self.server,self.port,self.user,self.password)
  22.               print("COnexion lista")
  23.           except paramiko.ssh_exception.AuthenticationException as e:
  24.               print("ERROR 2: %s" %(str(e)))
  25.           except EOFError as e:
  26.               print("Cerrando sesión SSH: %s" % (e))
  27.               self.ssh.close()
  28.  
  29.     def consox(self,shell):
  30.        '''Ciclo para intectuar con la shell'''
  31.        while True:
  32.             cmd=input(' ')
  33.             shell.send(cmd)
  34.             shell.send('\n')
  35.             time.sleep(0.5)
  36.             resp = shell.recv(9999)
  37.             print(resp.decode())
  38.  
  39.  
  40. class conso(cmd.Cmd):
  41.     ''' Clase para instaciar la shell de conexion SSH'''
  42.  
  43.    
  44.     def __init__ (self):
  45.         '''Constructor que instancia la ConexionSSH, y conecta al servidor'''
  46.         cmd.Cmd.__init__(self)
  47.         self.com=conexionSSH()
  48.         self.com.conectar()
  49.     def do_activate(self,comando):
  50.         '''Activata la Shell'''
  51.         shell=self.com.ssh.invoke_shell()
  52.         resp = shell.recv(9999)
  53.         print(resp.decode())
  54.         self.com.consox(shell)
  55.     def do_enable(self):
  56.         '''Comando de root '''
  57.         pass
  58.        
  59.  
  60. consola=conso()
  61. consola.cmdloop()

Última edición por RaKKoS; 03/06/2015 a las 19:44
  #2 (permalink)  
Antiguo 04/06/2015, 21:16
 
Fecha de Ingreso: junio-2009
Ubicación: House
Mensajes: 38
Antigüedad: 15 años
Puntos: 1
Respuesta: Ejecutar un comando en el loop de la libreria CMD

Bueno me respondo yo mismo xD luego de estar varias horas intentando opciones sin éxito alguno, me detuve a traducir el doc string del método cmdloop de la clase CMD

Cita:
cmdloop(self, intro=None)
| Repeatedly issue a prompt, accept input, parse an initial prefix
| off the received input, and dispatch to action methods, passing them
| the remainder of the line as argument.
Y luego de hacer translate con google xD debido a que mi ingles es muy malo, intente realizar lo que entendí que fue pasar el método con el parámetro que activa la consola, y bum funciono le agregue simplemente este código:

Código Python:
Ver original
  1. consola.cmdloop(consola.do_activate('activate'))
Y de esta forma logre instanciar paramiko y emular una pequeña consola, gracias de todas formas .

Etiquetas: cadena, cmd, comando, gui, libreria, loop
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:14.