2011-04-03 2 views
0

J'utilise telnetlib pour un simple script Telnet sur un commutateur Juniper. Ci-dessous mon code:telnetlib et "buf = self.sock.recv (50)" erreur

import telnetlib 

HOST = raw_input("Enter host IP address: ") 
USER = raw_input("Enter Username: ") 
PWD = raw_input("Enter Password: ") 
TNT = telnetlib.Telnet(HOST, 23, 10) 
TNT.read_until("login:") 
TNT.write(USER.encode('ascii') + "\n") 
TNT.read_until("Password:") 
TNT.write(PWD.encode('ascii') + "\n") 
TNT.write("set cli screen-length 10000\nconfigure\nshow\nexit\n") 
print (TNT.read_all().decode('ascii')) 
TNT.close() 
raw_input ("Press any Key to Quit: ") 

Chaque fois que je lance ce programme avec le commutateur Juniper il me donne cette erreur:

Traceback (most recent call last): 
    File "D:\Python\AuTel Project\Old versions and tials\Telnet (Python 2.7) V1.4.py", line 17, in <module> 
    print (TNT.read_all().decode('ascii')) 
    File "C:\Python27\lib\telnetlib.py", line 325, in read_all 
    self.fill_rawq() 
    File "C:\Python27\lib\telnetlib.py", line 516, in fill_rawq 
    buf = self.sock.recv(50) 
timeout: timed out 

J'ai fait face à ce problème avant avec Cisco et Nortel, mais je pouvais surmonter avec Commande "terminal lenght 0" sur Cisco et similaire sur Nortel. J'ai essayé d'utiliser la commande équivalente sur Juniper (set cli screen-length), mais je reçois toujours la même erreur. J'ai besoin de savoir quelle est la signification de cette erreur et quelle en est la raison, et comment la surmonter.

Cordialement,

Répondre

0

Le message d'erreur

buf = self.sock.recv(50) 
timeout: timed out 

est assez évident.

Votre connexion a expiré pour une raison quelconque. Soit un pare-feu ou un composant réseau entre-deux a fermé la connexion en raison d'une inactivité après un certain temps ou le service distant n'a pas répondu dans un délai raisonnable.

+0

Salut RestRisiko, Ce n'est pas à cause du délai de connexion, je peux telnet à cet appareil à partir de mon ordinateur portable qui exécute le script. si c'était parce que le délai de connexion, il échouerait dans la commande telnetlib.Telnet (hôte), mais il échoue dans la commande read_all. Je souhaite que ce soit évident pour vous maintenant. – Amr

0

J'ai eu le même problème.

Commande pour modifier "TNT.read_all()" -> "TNT.read_some()" et le script à réessayer.

0

tn.read_very_eager()

a travaillé très bien pour moi. Rappelez-vous que nous devons donner suffisamment de temps de sommeil avant cela afin qu'il soit enregistré avant de lire

Questions connexes