2012-04-12 7 views
4

Ich benutze Python Telnetlib zu Telnet zu einer Maschine und Ausführen von wenigen Befehlen und ich möchte die Ausgabe dieser Befehle erhalten.Lesen der Ausgabe mit Telnetlib in Echtzeit

Also, was das aktuelle Szenario ist -

tn = telnetlib.Telnet(HOST) 
tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("command1") 
tn.write("command2") 
tn.write("command3") 
tn.write("command4") 
tn.write("exit\n") 

sess_op = tn.read_all() 
print sess_op 
#here I get the whole output 

Jetzt kann ich alle konsolidierte Ausgabe in sess_op erhalten.

Aber, was ich will, ist die Ausgabe von command1 unmittelbar nach ihrer Ausführung und vor der Ausführung von command2 zu bekommen, als ob ich in der Schale von der anderen Maschine gerade arbeitete, wie hier gezeigt -

tn = telnetlib.Telnet(HOST) 
tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("command1") 
#here I want to get the output for command1 
tn.write("command2") 
#here I want to get the output for command2 
tn.write("command3") 
tn.write("command4") 
tn.write("exit\n") 

sess_op = tn.read_all() 
print sess_op 

Antwort

2

Sie müssen sich auf die Dokumentation telnetlib Modul here beziehen.
Try this -

tn = telnetlib.Telnet(HOST) 
tn.read_until("login: ") 
tn.write(user + "\n") 
if password: 
    tn.read_until("Password: ") 
    tn.write(password + "\n") 

tn.write("command1") 
print tn.read_eager() 
tn.write("command2") 
print tn.read_eager() 
tn.write("command3") 
print tn.read_eager() 
tn.write("command4") 
print tn.read_eager() 
tn.write("exit\n") 

sess_op = tn.read_all() 
print sess_op 
+4

es funktioniert nicht in meinem Fall! – theharshest

7

ich in etwas lief ähnlich, während sie mit telnetlib arbeiten.

Dann erkannte ich einen fehlenden Wagenrücklauf und eine neue Zeile am Ende jedes Befehls und read_eager für alle Befehle. Etwas wie folgt aus:

tn = telnetlib.Telnet(HOST, PORT) 
tn.read_until("login: ") 
tn.write(user + "\r\n") 
tn.read_until("password: ") 
tn.write(password + "\r\n") 

tn.write("command1\r\n") 
ret1 = tn.read_eager() 
print ret1 #or use however you want 
tn.write("command2\r\n") 
print tn.read_eager() 
... and so on 

statt nur schriftlich den Befehl wie:

tn.write("command1") 
print tn.read_eager() 

Wenn es nur mit einem „\ n“ für Sie gearbeitet, das Hinzufügen nur ein „\ n“ könnte genug statt sein von "\ r \ n", aber in meinem Fall musste ich "\ r \ n" verwenden und ich habe es noch nicht mit einer neuen Zeile versucht.