Frage

Ich schreibe eine Bibliothek, um Telnet'ing auf einem Remote -Server zu unterstützen und Apps auszuführen.

Die Dinge sind schwimmend, wenn es darum geht, eine Verbindung herzustellen, Daten zurückzubekommen, zu analysieren usw. (zumindest so schwimmend wie möglich für die Kommunikation mit Programmen über eine Textschnittstelle).

Eine App ändert den Cursor, wenn er ordnungsgemäß eintritt, oder hinterlässt den ursprünglichen Cursor, wenn er fehlschlägt (ich schreibe die Apps nicht, ich muss sie nur verwenden.)

Wenn die App korrekt beginnt, funktioniert dies ohne Problem:

promptB = "hello(x)# "   # Yes, the space at the end is intentional
response = tn_conn.cmd("app_name\n", prompt=promptB)

Ich möchte die sofortige Änderung (oder die mangelnde Änderung der sofortigen Änderung) verwenden, um festzustellen, ob das Programm nicht gestartet wurde. Ich dachte mir, dies wäre eine goldene Gelegenheit, Telnetlibs Afd () () zu versuchen (), da erwartete () eine Liste von Strings übergeben kann, die mit der Antwort übereinstimmen.

Ich kann dies jedoch nicht zum Laufen bringen:

promptA = "hello(x)# "   # Yes, the space at the end is intentional
promptB = "hello> "      # Yes, the space at the end is intentional

tn_conn.write("app_name\n")
which_prompt, mo, response = self.tn_conn.expect([promptA, promptB], timeout=3)

Der Befehl erwarten, es wird immer ausgerichtet, ob Apps erfolgreich beginnt oder nicht.

was = "-1"

Mo = keine

response = "mumble mumble r r n andere Dinge r n r nhello#"

Die Dokumente sagen, dass entweder ein String- oder ein Regex -Objekt übergeben werden kann (ich übertrage eine Zeichenfolge). Fehlt mir also etwas? Ein Blick auf den Telnetlib -Code zeigt, dass seine Anrufe re.Search (), nicht re.Match (), so dass das nicht das Problem zu sein scheint.

Kann jemand bitte Vorschläge geben, was ich falsch mache?

BearbeitenZu dem promptierten Beispiel wurde Parens hinzugefügt, um besser zu veranschaulichen, warum erwartet () nicht wie erwartet funktioniert.

War es hilfreich?

Lösung 3

In früheren Versuchen hatte ich die Regex -Option durch Platzierung verfolgt .* an beiden Enden meiner Suchzeichenfolge sowie a re.compile() in die Suchzeichenfolge, bevor sie übergeben/sie an an sie angehen .expect(); Alles ohne Glück.

Dank des Vorschlags von Jathanismus habe ich mit Regex erneut untersucht, diesmal mit dem Gedanken, dass expect() war, ähm ... "regex" erwartete, wo ich 'String' dachte.

Sicher genug, es gab Charaktere in meiner schnellen Zeichenfolge, die erwartet wurde, als Regex -Symbole - ()Um genau zu sein. Flucht den Parens lassen expect() Mach seinen Job.

Andere Tipps

Vergessen Sie nicht, ob Sie den Regex in Python verwenden, können Sie immer den RAW verwenden (r'my string') Methode, anstatt alle Flüchtlinge hinzuzufügen; macht es lesbarer.

Ich habe etwas zu arbeiten. Suchen Sie nach # oder % oder $ Eingabeaufforderungen. Stellen Sie sicher, dass Ihre Eingabeaufforderungen entkommen sind. (). Vielleicht entkommen alles, um sicher zu sein.

idx, obj, response = tn_conn.expect("\#","\%","\$",3)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top