telnetlib 的 read_until() 函数困惑
我正在用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)
。