0
我正在開發一個軟件,它使telnet連接發送腳本到路由器。我需要將每個路由器的日誌保存在txt文件中,但最後shows命令保存不完整,尤其是具有較長輸出的命令(show run)。我配置了vty行,命令(長度爲512),但是這些命令會繼續記錄在不完整的文件中。 我想這是一個關於緩衝的問題,是有可配置緩衝區的最大的方式,也可能是另一個問題?」蟒蛇上的緩衝區telnetlib問題
我希望你能幫助我,謝謝。
import telnetlib
import time
import re
from os import listdir
import os.path
import os
global ip
ip = []
global cmd_file
cmd_file= []
global bandera
bandera = 0
def agregardispositivos():
numero = input("Inserte la cantidad de equipos a conectar: ")
return numero
def agregarpuertos(numero):
ip = []
for i in range(numero):
direcciones =raw_input("Ingrese la direccion IP: ")
ip += [direcciones]
return ip
def asociarpuerto_router(numero):
router=[]
for i in range(numero):
nombre= "R"+ str(i+1)
router.append(nombre)
print router
return router
def agregararchivo(numero, pregunta):
#bandera=0
cmd_file = []
for root, dirs, files in os.walk("."):
path = root.split('/')
if os.path.basename(root) == pregunta:
for lista in files:
archivos=lista
cmd_file += [archivos]
return cmd_file
def realizar_prueba(direccion, TELNET_PORT, TELNET_TIMEOUT, READ_TIMEOUT, respuesta, pregunta):
try:
connection = telnetlib.Telnet(direccion, TELNET_PORT, TELNET_TIMEOUT)
output = connection.read_until("name:", READ_TIMEOUT)
connection.write('root' + "\n")
output = connection.read_until("word:", READ_TIMEOUT)
connection.write('admin123'+ "\n")
time.sleep(0.2)
selected_cmd_file= open(respuesta, 'r')
print selected_cmd_file
#Starting from the beginning of the file
selected_cmd_file.seek(0)
for each_line in selected_cmd_file.readlines():
connection.write(each_line + '\n')
time.sleep(0.2)
#Closing the file
selected_cmd_file.close()
#Test for reading command output
output = connection.read_very_eager()
band=1
guardar_salida(output, pregunta,band)
realizar_show(connection,pregunta)
#Closing the connection
connection.close()
time.sleep(0.2)
except IOError:
print "Input parameter error! Please check username, password and file name."
def guardar_salida(output, pregunta,band):
archive = "Corrida_"+pregunta+".txt"
f =open(archive, 'a')
if (band == 1):
f.write ("***** Configuracion de Router *****\n")
if (band == 2):
f.write ("\n\n###### Aplicacion de shows #####\n")
f.write(output)
f.close()
def realizar_show(connection,pregunta):
archivo_show= open('VERIFICATION_STEPS.txt', 'r')
#Starting from the beginning of the file
archivo_show.seek(0)
while True:
auxar = archivo_show.readline()
if (re.search("#STEP "+pregunta[5:]+"#", auxar, re.IGNORECASE)):
auxar = archivo_show.readline()
while auxar != '\n':
connection.write(auxar + '\n')
connection.write(' ')
time.sleep(0.2)
auxar = archivo_show.readline()
break
else:
archivo_show.readline()
archivo_show.close()
output = connection.read_very_eager()
band=2
guardar_salida(output, pregunta,band)
#Open telnet connection to devices
def open_telnet_conn(cmd_file, ip):
j=0
numero=agregardispositivos()
ip=agregarpuertos(numero)
pregunta = raw_input("Dime la carpeta: ")
cmd_file=agregararchivo(numero, pregunta)
print cmd_file
TELNET_PORT= 23
TELNET_TIMEOUT = 5
READ_TIMEOUT = 5
#EL CICLO QUE RECORRE LAS DIRECCIONES IP
for direccion in ip:
#PREGUNTA CONTIENE EL DIRECTORIO (STEP_1 , 2 , 3 , ETC)
cadena =cmd_file [j]
respuesta= "./"+pregunta+"/"+cadena+""
print respuesta
realizar_prueba(direccion, TELNET_PORT, TELNET_TIMEOUT, READ_TIMEOUT, respuesta, pregunta)
j=j+1
while True:
print "1. Ejecutar scripts"
print "2. Salir"
opcion = input("Escribir tu opcion: ")
if opcion ==1:
#Calling the Telnet function
open_telnet_conn(cmd_file, ip)
elif opcion ==2:
break
else:
print "Tu opcion no es valida"
例