netlinker
04-03-2008, 00:55
Hallo,
ich bin gerade dabei ein expect Scrip zu schreiben, welches sich auf einen Router einloggt und dort einige Abfragen machen soll. Zusätzlich möchte ich einige Infos ausgeben.
Jedoch habe ich einige Probleme mit der Reihenfolge der Ausgabe von expect.
Expect scheint die Informationen die er vom jeweiligen Prozess erhält immer dann auszugeben, wenn er diese gegen einen Ausdruck prüft (also wenn im Script ein expect steht).
Es wird dann alles Ausgegeben, gegen das er den Ausdruck gerade prüft.
Dieses kann auch mehr sein, als dass auf was ich matche.
Hier mal ein Beispiel:
Ich sende zwei Zeilen, die erste mit \r, die zweite ohne \r.
Ich matche auf das \r.
Hier das Debug:
+=Ausgabe -=Debug
------------>send: sending "#Zeie1 match\r" to { exp4 }
------------>send: sending "#Zeile2 nomatch" to { exp4 }
++++++++++++>#Zeie1 match\r\n\r\n{master}\r\nsaver@ROUTER> #Zei
------------>expect: does "#Zeie1 match\r\n\r\n{master}\r\nsaver@ROUTER> #Zei" (spawn_id exp4) match regular expression "(\r)"? yes
------------>expect: set expect_out(0,string) "\r"
------------>expect: set expect_out(1,string) "\r"
------------>expect: set expect_out(spawn_id) "exp4"
------------>expect: set expect_out(buffer) "#Zeie1 match\r"
In der Ausgabe von expect sehe ich folgendes:
#Zeie1 match
{master}
saver@ROUTER> #Zei
Die Ausgabe der beiden Kommandos würde im Telnet so aussehen:
#Zeie1 match
{master}
saver@ROUTER> #Zeile2 nomatch
Wenn ich jetzt natürlich nach dem match Auf \r eine Info ausgebe ist alles durcheinander, weils nicht nach dem \r stehen würde, sondern nach dem "#Zei" der zweiten Zeile.
Daher meine Frage gibt es in Expect eine Option, dass im Log die Daten nur bis zu dem Punkt ausgegeben werden, an dem der Match ist?
Und mein eine zweite Frage, kann ich in expect die Daten, gegen die er Matcht (nenne es einfach mal Buffer) abfragen?
Ich meine dass, was ich im debug zwischen "does und (spawn_id exp4)" steht.
Wäre schon, wenn ihr ein paar Tipps hättet.
Gruß Björn
ich bin gerade dabei ein expect Scrip zu schreiben, welches sich auf einen Router einloggt und dort einige Abfragen machen soll. Zusätzlich möchte ich einige Infos ausgeben.
Jedoch habe ich einige Probleme mit der Reihenfolge der Ausgabe von expect.
Expect scheint die Informationen die er vom jeweiligen Prozess erhält immer dann auszugeben, wenn er diese gegen einen Ausdruck prüft (also wenn im Script ein expect steht).
Es wird dann alles Ausgegeben, gegen das er den Ausdruck gerade prüft.
Dieses kann auch mehr sein, als dass auf was ich matche.
Hier mal ein Beispiel:
Ich sende zwei Zeilen, die erste mit \r, die zweite ohne \r.
Ich matche auf das \r.
Hier das Debug:
+=Ausgabe -=Debug
------------>send: sending "#Zeie1 match\r" to { exp4 }
------------>send: sending "#Zeile2 nomatch" to { exp4 }
++++++++++++>#Zeie1 match\r\n\r\n{master}\r\nsaver@ROUTER> #Zei
------------>expect: does "#Zeie1 match\r\n\r\n{master}\r\nsaver@ROUTER> #Zei" (spawn_id exp4) match regular expression "(\r)"? yes
------------>expect: set expect_out(0,string) "\r"
------------>expect: set expect_out(1,string) "\r"
------------>expect: set expect_out(spawn_id) "exp4"
------------>expect: set expect_out(buffer) "#Zeie1 match\r"
In der Ausgabe von expect sehe ich folgendes:
#Zeie1 match
{master}
saver@ROUTER> #Zei
Die Ausgabe der beiden Kommandos würde im Telnet so aussehen:
#Zeie1 match
{master}
saver@ROUTER> #Zeile2 nomatch
Wenn ich jetzt natürlich nach dem match Auf \r eine Info ausgebe ist alles durcheinander, weils nicht nach dem \r stehen würde, sondern nach dem "#Zei" der zweiten Zeile.
Daher meine Frage gibt es in Expect eine Option, dass im Log die Daten nur bis zu dem Punkt ausgegeben werden, an dem der Match ist?
Und mein eine zweite Frage, kann ich in expect die Daten, gegen die er Matcht (nenne es einfach mal Buffer) abfragen?
Ich meine dass, was ich im debug zwischen "does und (spawn_id exp4)" steht.
Wäre schon, wenn ihr ein paar Tipps hättet.
Gruß Björn