Ich muss von einem Gerät seine gesamte Ausgabe (parse) bekommen.Lesen bis eine nur teilweise bekannte Zeile - Python
Meine Lösung war: 1) Ermitteln Sie, wie die letzte Zeile der Ausgabe wie
2) Verwenden Sie den Code sieht unter die Ausgabe bis zur letzten Zeile zu lesen (das ist ein Weg, um zu sagen ist - lesen Sie das ganze Ausgang)
last_line = "text of the last line"
read_until(last_line)
3) Technisches Detail: macht es zu einem return
Wert der get_output()
als Mittel um es weiter zu einer parse_result()
Funktion übergeben.
Das Problem ist: Die letzte Zeile kann verschiedene Formen annehmen und nur sein grobes Format ist bekannt. Zum Beispiel könnte es sagen: {"diag":"hdd_id", "status":"0"}
. Jedoch können sowohl "diag"
als auch "status"
andere Werte als "hdd_id"
und "0"
annehmen.
Was kann ich tun, um den "Text der letzten Zeile" universeller zu machen, so dass die read_until() für jeden Wert von "diag" und "status" stoppt? (vorausgesetzt, der Ausgang enthält immer die Worte "diag" und "status")
Was ich versucht habe: Mit regulären Ausdrücken. Definieren last_line = re('"status":"."}')
mit der Tatsache, dass .
im regulären Ausdruck bedeutet einen beliebigen Wert. Was ich bekomme, ist TypeError: 'module' object is not callable
.
Es wäre auch nicht viel Sinn machen, dass die regulären Ausdruck von str(re('"status":"."}'))
da, so weit in eine Zeichenfolge zu konvertieren, wie ich reguläre Ausdrücke verstehen, wäre es keine bestimmte Zeichenfolge (wegen .
) bedeuten.
Können Sie etwas Code posten? Ist 'read_until' eine Bibliotheksfunktion oder etwas, das du selbst schreibst? – tzaman
'read_until' ist eine Bibliotheksfunktion von telnetlib.py - da die Ausgabe des Geräts über eine TelNet-Verbindung gelesen wird. Hier ist der wesentliche Teil ihrer Definition: 'def read_until (self, Spiel, timeout = None): """ Lesen Sie, bis eine bestimmte Zeichenfolge gefunden wird oder bis timeout.' – Bolo