Ich versuche, etwas Ausgabe von einer CLI zu parsen und iterieren darüber. Die Ausgabe ist ungefähr wie folgt, und ich möchte über jede ID iterieren, um mehr mit diesen Objekten zu tun.Wie man über mehrere erwartete Zeilen iteriert
OVM> Liste ServerPool
Befehl: Liste ServerPool
Status: Erfolg
Daten:
id: 123456789 Name: pool1
ID: 987654321 Name: pool2
Ich habe versucht, der folgende Code, aber aus irgendeinem Grund hängt es nach dem Drucken der zweiten ID. Ich denke, es hat etwas mit exp_continue zu tun, aber ich verstehe nicht, zu gut zu erwarten. Außerdem mache ich diese einfache Lösung für den Fall, dass ich nur 2 IDs habe, weil ich nicht weiß, wie man sie verallgemeinert und mehrere Zeilen gleichzeitig erhält, um später über sie zu iterieren und mehr Befehle zu senden.
Ich habe versucht, einen Ausgang hinzuzufügen, nachdem die zweite ID gedruckt wurde, aber es war nutzlos, es ist wie es versucht, weiterhin Dinge zu erwarten und hängt dort. Ich habe keine Ahnung, wie man den exp_continue an diesem Punkt abbrechen kann.
expect "OVM> " {
send "list ServerPool\r"
expect {
-re " id:(.*?) (.*?)\n\r" {
send_user "$expect_out(1,string)\n"; exp_continue
}
-re " id:(.*?) (.*?)\n\r" {
send_user "\n$expect_out(1,string)\n";
}
}
}
send "exit\r"
expect eof
Warum haben Sie gleiche Regex zweimal? Sie können ein Zeitlimit hinzufügen, um aus der Routine zu kommen. – Ashish
Sind beide IDs gleichzeitig oder einzeln (nachdem Sie einen Befehl gesendet haben, der die erste ID erhält)? – Sharad
Die Liste der IDs kommt sofort. Wenn ich nur einen erwarte, wie du weißt, braucht es nur die erste ID. Ich möchte wissen, wie man die Liste von IDs, wie in einem Array oder etwas, nimmt und sie später in einer Schleife verwendet, um andere Befehle zu senden, die sie benötigen. – Nocturn