Можно ли очистить выходной буфер в Telnetlib на Python 2.7?

Я использую telnetlib, чтобы напечатать вывод после последней команды, которую я пишу на сервер

tn.write(cmd_login)
tn.write(cmd...)
tn.write(cmd_last)
print tn.expect([word],timeout)[-1]

однако, когда я печатал результат ожидания, он также показывает результат, который я написал на сервер раньше (например:cmd_login cmd...). Есть ли способ распечатать результат только после tn.write(cmd_last)?

1 ответ

Я решил это, запустив read_very_lazy() + read_until:

tn.read_very_lazy()
tn.write(b'the_command\r\n')
tn.read_until(b'\r\n', timeout=2)

Однако я еще не очень хорошо его тестировал, чтобы утверждать, что он не имеет никаких отрицательных побочных эффектов.

Я бы предложил использовать Telnet.read_until после каждого Telnet.write. Для ожидаемого аргумента read_until можно использовать приглашение telnet. Наконец, команда должна быть вычтена из вывода. Я не знаю лучшего пути. Это может выглядеть так:

tn.write(cmd_login)
tn.read_until(prompt)
tn.write(cmd...)
tn.read_until(prompt)
tn.write(cmd_last)
output = tn.read_until(prompt)
cmdIndex = output.find(cmd_last)
output = output[cmdIndex + len(cmd_last):]
print output
Другие вопросы по тегам