telnetlib read_until()函数混淆

时间:2010-12-14 14:33:36

标签: python telnetlib

我正在尝试使用python3自动执行一些telnet操作。所以我开始在telnetlib中使用build(而不是pexpect)。

实际上一切都运行到目前为止,但我不完全理解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 个答案:

答案 0 :(得分:1)

是的,如果您的主机名是example.com,read_until将返回weijwrgnerg hgqwv blather example.com之类的内容。除非它在三秒钟之后没有找到主机名,否则它将随后吐出所有内容:weijwrgnerg hg

所以我认为你做的几乎是正确的。您可能希望re.escape您的主机名,否则它会将其解释为正则表达式。或者,您可以使用Python的.endswith()。您可以output.decode()获取字符串(而不是bytes.decode(output))。