Python - telnet en routers y lista de resultados completa (golpear la barra espaciadora)

StackOverflow https://stackoverflow.com/questions/3690606

  •  02-10-2019
  •  | 
  •  

Pregunta

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 
    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

Mi problema es que cuando intento agarrar "Mostrar registro" de router Cisco, me da resultado justo parcial, lo que se debe a que necesita para golpear la barra espaciadora 5 veces (dependiendo de cuánto tiempo se historial de registro) para obtener -registro completo cuando lo haga manualy, y no sé cómo decirle a Python a la lista de registro completo. Cualquier sugerencia?

¿Fue útil?

Solución

No es una solución, pero parece una solución convincente:

Se puede desactivar la paginación del terminal emitiendo el siguiente comando CLI del IOS.

  

longitud terminal de 0

Otros consejos

En realidad, es la respuesta exacta ..... tiene que introducir la longitud del terminal 0 o las páginas del router la salida como el uso de UNIX "más" para que sea legible por humanos y no sólo por desplazamiento de forma rápida

import telnetlib

def telNetCall():
    host  = "10.200.1.23"
    user  = "me"
    password = "matrix"
    telnet  = telnetlib.Telnet(host) 
    telnet.read_until('Username: ', 3) 
    telnet.write(user + '\r')
    telnet.read_until('Password: ', 3)  
    telnet.write(password + '\r') 

    telnet.write("term length 0"+ "\r\n")

    telnet.write("sh log"+ "\r\n")
    telnet.write('exit' + '\r')
    print telnet.read_all() 

El problema se convierte entonces en cómo va a salir la captura de más de aproximadamente 20 kb ... al iniciar la sesión para presentar consigo toda la salida, pero sólo quiero guardar la salida selectiva, no toda la sesión. Cuando se utiliza child.after la salida está truncado, por ejemplo, el principio es que falta que puede ser mitigado un poco mediante el aumento de maxread pero todavía bombas fuera cuando acercarse a 30-40kb de salida.

Para los que preguntan, estoy agarrando la salida del detector con Cisco "sh int | Protocolo I | Última". Esto sólo devuelve 3 líneas por cada interfaz, pero algunos de pilas de conmutación de mi cliente tiene 450 puertos

No estoy seguro que la dinámica es aquí, pero para algunos interruptores que tiene éxito.

Durante un tiempo he tratado de evitar el problema girando selectivamente el registro de archivo de encendido y apagado. Esto resultó ser poco fiable y desde el registro genérico que se puede ver de esa manera la producción partidos pexpect antes de la tala ve. Terminé deshabilitar el registro de los datos, mientras que todavía se están escribiendo en el archivo. truncando la salida después de aproximadamente 10 líneas de salida.

Así que la pregunta sigue siendo en última instancia, ¿cómo se puede aumentar la fiabilidad de child.after. Con el fin de capturar grandes salidas. No tengo ningún problema con el aumento del tiempo de espera en declaraciones esperan, siempre y cuando la salida es fiable. Lo que veo ahora no hay tiempo de espera con la producción incompleta.

child.sendline(action)
child.expect(prompt_keys)
action_output = str(child.after)    # Captures the output
# print action_output   # Uncomment for debugging grabbed output
output_file.write(action_output + "\n\n\n") # Write the output to file
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top