Python - telnet sur les routeurs et la liste complète résultat (frapper la barre d'espace)

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

  •  02-10-2019
  •  | 
  •  

Question

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

Mon problème est que lorsque je tente de saisir « Afficher le journal » du routeur cisco, il me donne le résultat juste partiel, que je c'est parce que vous avez besoin de la barre d'espace frappé 5 fois (dépend combien de temps est l'histoire du journal) pour obtenir journal complet-quand je le fais manualy, et je ne sais pas comment dire python à la liste journal complet. Toute suggestion?

Était-ce utile?

La solution

Pas une solution, mais il semble une solution plausible:

Vous pouvez désactiver la pagination de terminal en exécutant la commande IOS CLI suivante.

  

0 longueur terminale

Autres conseils

Il est en fait la réponse exacte ..... vous devez entrer la longueur borne 0 ou les pages de la sortie routeur comme l'utilisation unix « plus » pour qu'il soit lisible par l'homme et ne se contente pas de défiler rapidement

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

Le problème devient alors comment la sortie de capture plus d'environ 20 Ko ... lors de la connexion à déposer, je reçois toutes les sorties, mais je veux seulement pour sauver la sortie sélective, pas toute la session. Lorsque vous utilisez child.after la sortie est tronquée, par exemple, le début manque qui peut être atténué un peu en augmentant maxread mais il reste des bombes quand se rapproche de 30-40kb de la production.

Pour ceux qui se demandent, je suis preneuse la sortie de commutateurs Cisco en utilisant « sh int | protocole i | Dernière ». Cela ne retourne 3 lignes par interface, mais certaines des piles de commutateurs de mon client ont 450 ports

Je ne sais pas ce que la dynamique est ici, mais pour certains commutateurs, il ne réussit.

Pendant un certain temps j'ai essayé de contourner le problème en tournant sélectivement journalisation dans le fichier et hors tension. Cela est avéré peu fiable et de l'exploitation forestière générique je peux voir que les matches de pexpect façon de sortie avant l'enregistrement voit. J'ai fini par désactiver l'enregistrement alors que les données ont été encore en cours d'écriture dans un fichier. tronquer la sortie au bout d'environ 10 lignes de sortie.

Ainsi, les restes de question ultime, comment peut-on augmenter la fiabilité de child.after. Afin de saisir de grandes sorties. Je n'ai pas de problème avec l'augmentation du délai d'attente sur les déclarations se attendent, tant que la sortie est fiable. Ce que je vois maintenant pas de délai avec une sortie incomplète.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top