Lesen von Daten mit tn.read_all() in python
read_all()" zum Lesen von Daten von einem cisco-Gerät.
einige Zeit liest es die Daten und irgendwann wird es nicht Lesen und gibt eine leere Zeichenkette.
Ich habe versucht, aus 2 Befehle, aber noch ist es nicht consitently die Daten zu Lesen.
data=tn.read_until("exit")
data= tn.read_all()
nennen Sie bitte ein paar inputs, ich bin neu in python.
code, den ich verwende:
_command2='show chassis'
print 'Commands issued............'
#ISSUE COMMANDS VIA TELNET
tn.write("term len 0\r")
#tn.read_until(" ")
#tn.write(_command1+"\r")
tn.write(_command2+"\r")
tn.write("exit\r" )
print 'Read telnet data............'
#READ TELNET DATA
#data=tn.read_eager()
data=tn.read_until("exit")
#data= tn.read_all()
#print data
print 'Telnet data read successfully............'
Wie hast du
Ist
ich leite in einer Funktion def Daten(tn,Gerät,fqdn,device_data,_lookupTableDict,debugging):
Ja u r rechts: tn = telnetlib.Telnet(_device,23)
Wenn
tn
?Ist
tn
eine telnetlib.Telnet
Objekt?ich leite in einer Funktion def Daten(tn,Gerät,fqdn,device_data,_lookupTableDict,debugging):
Ja u r rechts: tn = telnetlib.Telnet(_device,23)
Wenn
read_until
oder read_all
gibt eine leere Zeichenfolge zurück, das bedeutet, dass Sie auf EOF vor dem Lesen von Daten.InformationsquelleAutor Vinod HC | 2011-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich auch vor dem gleichen problem..Das würde helfen:
Dieses snippet liest die info, nachdem ein Befehl ausgeführt wird.
Und liest bis ' # ' - Eingabeaufforderung wird angezeigt.
InformationsquelleAutor yogi
Kurze Antwort:
Verwenden
time.sleep(1)
zwischenwrite
BefehleLange Antwort:
Wenn Sie einen Befehl eingeben, der auf einem Cisco-IOS-Konsole, die es blockiert, bis der Befehl abgeschlossen ist. Jede Eingabe in der Konsole eingeben, während der Befehl ausgeführt wurde, wird dann in den Laufenden Befehl, ähnlich wie STDIN funktioniert auf einer bash-shell. Aber in der bash, wenn einer die Befehle nicht explizit Lesen Sie den Eingang, nach dem beenden des Programms die bash übernimmt den nicht verbrauchten input-und interpretiert es als ein shell-Befehl. Also, wenn Sie wollen, um zwei Befehle einer nach dem anderen, wobei der erste Befehl nicht von STDIN Lesen, können Sie den zweiten Befehl, während der erste Befehl ausgeführt wird, d.h. Sie müssen nicht warten, bis der erste Befehl abgeschlossen ist, bevor Sie geben Sie einen anderen Befehl. Diese Art der Pufferung Mechanismus macht telnet scripting einfach und wir sind gewachsen, zu erwarten, dass diese von der Reife Muscheln. Anscheinend Cisco IOS fehlt diese Funktion und so müssen Sie sicherstellen, dass Sie nicht geben Sie Ihre Befehle zu schnell. Es gibt zwei Möglichkeiten, die ich an denken kann, um darüber zu gehen:
InformationsquelleAutor Ishan Arora
Verwenden:
tn.read_very_eager()
statt
tn.read_all()
-read_all
wartet, bis die Verbindung geschlossen wirdInformationsquelleAutor Abhilash Ramineni
@yogi 's Antwort ist fast richtig.
aber einige details erklärt werden
m1
: es ist das, was Ihr telnet-server zurückgegeben, wenn der Befehl beendetm2
: es sollte+=
, da einige Befehl führt mehrere ZeilenInformationsquelleAutor XOQ