Python Telnetlib read_until '#' or '>', multiple string determination?

user3352539 picture user3352539 · Feb 27, 2014 · Viewed 15.8k times · Source
if (tn.read_until('>')):
    action1
else:
    action2

or

if (tn.read_until() == '>'):
    action1
else:
    action2

I just want the read_until() to check which desired String comes first, and do different actions. Or is there any equivalent ways?

Answer

msvalkon picture msvalkon · Feb 27, 2014

Look at the docs. Read until wants the expected string as a positional argument and an optional timeout. I would do it like this:

>>> try:
...     response = tn.read_until(">", timeout=120) #or whatever timeout you choose.
... except EOFError as e:
...     print "Connection closed: %s" % e

>>> if ">" in response:
...    action1
... else:
...    action2

If you want multiple different characters you can use read_some()

>>> while True: #really you should set some sort of a timeout here.
...    r = tn.read_some()
...    if any(x in r for x in ["#", ">"]):
...        break