Python Telnetlib read_until '#' или '›', определение нескольких строк?

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

or

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

Я просто хочу, чтобы read_until() проверял, какая нужная строка идет первой, и выполнял разные действия. Или есть эквивалентные способы?


person user3352539    schedule 27.02.2014    source источник


Ответы (2)


Просмотрите документы. Читать до тех пор, пока не потребует ожидаемую строку в качестве позиционного аргумента и необязательный тайм-аут. Я бы сделал это так:

>>> 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

Если вам нужно несколько разных символов, вы можете использовать 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
person msvalkon    schedule 27.02.2014

А еще лучше просто используйте:

buff_tpl = tn.expect(["#", ">"])

Это вернет кортеж с тремя элементами, первый (индекс 0) — это индекс совпадающего элемента списка, второй — и объект, а третий — выходной текст.

Вы можете распечатать вывод буфера, используя buff_tpl[2], и узнать, какой элемент соответствует, используя buff_tpl[0].

person Moh    schedule 31.03.2019