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]