Search code examples
pythonportautomated-teststelnettelnetlib

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


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?


Solution

  • 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