2017-03-11 8 views
0

Wenn ich mit dem Modul telnetlib eine Verbindung zur Telnet-Sitzung herstellen, muss ich auf vier Zeichenfolgen warten: 'a', 'b', ' c 'und' d 'oder Timeout (10 Sekunden) bevor ich eine Zeichenfolge in den Socket schreibe.Python Telnetlib read_until 'a' und 'b' und 'c' und 'd'

Gibt es eine Möglichkeit tn.read_until('a','b','c','d', timeout)

verwenden Ich möchte nur warten, bis alle vier Saiten vor der Aktion zuerst zu kommen.

Auch diese vier Saiten kommen jedes Mal in einer anderen Reihenfolge. Danke für jede Hilfe.

Antwort

1

können Sie the .expect method verwenden für a, b, coderd

Telnet zu warten. erwarten (Liste [, Timeout])

lesen, bis man aus einer Liste von einem regulären Ausdrücken übereinstimmt.

So:

(index, match, content_including_abcd) = tn.expect(['a', 'b', 'c', 'd'], timeout) 

Returns (-1, None, current_buffer) wenn Timeout erreicht ist.


Wir könnten es leicht zu einer Schleife b für a, zu warten, ändern, cundd:

deadline = time.time() + timeout 
remaining_strings = ['a', 'b', 'c', 'd'] 
total_content = '' 
while remaining_strings: 
    actual_timeout = deadline - time.time() 
    if actual_timeout < 0: 
     break 
    (index, match, content) = tn.expect(remaining_strings, actual_timeout) 
    total_content += content 
    if index < 0: 
     break 
    del remaining_strings[index] 
Verwandte Themen