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

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

или же

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам