Python - telnet sul router e lista dei risultati completo (premendo la barra spaziatrice)

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

  •  02-10-2019
  •  | 
  •  

Domanda

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() 

Il mio problema è che quando cerco di afferrare "Mostra registro" dal router di Cisco, mi dà frutto solo parziale, che cosa è perché è necessario colpire la barra spaziatrice per 5 volte (dipende da quanto tempo è la storia di registro) per ottenere log completo, quando lo faccio manualy, e non so come dire python per elencare registro completo. Ogni suggerimento?

È stato utile?

Soluzione

Non è una soluzione, ma sembra una soluzione plausibile:

È possibile disattivare paginazione terminale immettendo il seguente comando IOS CLI.

  

tratto terminale 0

Altri suggerimenti

In realtà è la risposta esatta ..... è necessario immettere la lunghezza del terminale 0 o le pagine del router l'uscita come l'utilizzo di unix "di più" in modo che sia leggibile e non fa proprio scorrere rapidamente da

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() 

Il problema diventa allora come uscita di acquisizione più grande di circa 20kb ... quando si accede a file ricevo tutto l'output, ma ho solo voglia di salvare l'output selettivo, non l'intera sessione. Quando si utilizza child.after l'uscita viene troncato, ad esempio, l'inizio non è presente che può essere mitigato un po 'aumentando maxread ma ancora bombe fuori quando ottiene vicino al 30-40kb della produzione.

Per coloro che chiedono, sto prendendo l'uscita di Cisco switch mediante "sh int | Protocollo | Last". Questo restituisce solo 3 righe per l'interfaccia, ma alcune delle pile di commutazione del mio cliente ha 450 porti

Non sono sicuro che le dinamiche sono qui, ma per alcuni interruttori esso riesce.

Per un po 'ho cercato di aggirare il problema girando selettivamente la registrazione di file di on e off. Questo si è rivelato inaffidabile e dalla registrazione generica posso vedere in questo modo uscita partite pexpect prima della registrazione lo vede. Ho finito per disabilitare la registrazione mentre i dati sono stati ancora scritti nel file. troncando l'uscita dopo circa 10 linee di uscita.

Così gli ultimi resti di domanda, come si può aumentare l'affidabilità di child.after. Per catturare grandi produzioni. Non ho alcun problema con l'aumentare il timeout sul si aspettano da dichiarazioni, fino a quando l'uscita è affidabile. Quello che vedo ora è nessun timeout con l'uscita 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top