telnetlib 的 read_until() 函数困惑

0 投票
1 回答
7647 浏览
提问于 2025-04-16 08:31

我正在用Python3自动化一些telnet操作,所以我开始使用内置的telnetlib(不是pexpect)。

其实到目前为止一切都运行得很好,但我不太明白read_until这个函数是怎么工作的。文档上说你可以设置一个超时时间,如果在这个时间内没有找到你想要的字符串,函数就会返回一个空的字节值;如果找到了其他值,那就是可以作为返回值保存的内容!

这样说有道理吗?

如果我想用read_until读取一个特定的值,我怎么知道这个值确实是函数读取到的呢?而且我也不知道怎么检查超时是否发生了。

目前我的解决办法是:

output = telnet.read_until(str.encode(hostname), 3)
if re.search(hostname, bytes.decode(output), re.IGNORECASE):
   #do something when the output matches the searchstring
else:
   #stop the function

但这对我来说没有什么意义,所以也许你知道更好的解决办法。

1 个回答

1

没错,如果你的主机名是 example.com,那么 read_until 会返回类似 weijwrgnerg hgqwv blather example.com 的内容。不过,如果在三秒内没有找到主机名,它就会把当时已经得到的内容直接输出,比如 weijwrgnerg hg

所以我觉得你做得差不多对了。你可能需要用 re.escape 来处理你的主机名,不然它会把它当成正则表达式来解析。或者,你也可以直接使用 Python 的 .endswith() 方法。另外,你可以用 output.decode() 来获取字符串,而不是用 bytes.decode(output)

撰写回答