在我写入服务器的最后一个命令之后,我正在使用 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) 之后打印结果?
我建议在每个 Telnet.write 之后使用 Telnet.read_until。对于 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
我通过运行 read_very_lazy() + read_until 解决了这个问题:
tn.read_very_lazy()
tn.write(b'the_command\r\n')
tn.read_until(b'\r\n', timeout=2)
但是,我没有很好地测试它,还没有声称它没有任何负面影响。