我正在尝试使用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
但这对我没有任何意义,所以也许你现在是一个更好的解决方案
答案 0 :(得分:1)
是的,如果您的主机名是example.com
,read_until将返回weijwrgnerg hgqwv blather example.com
之类的内容。除非它在三秒钟之后没有找到主机名,否则它将随后吐出所有内容:weijwrgnerg hg
。
所以我认为你做的几乎是正确的。您可能希望re.escape
您的主机名,否则它会将其解释为正则表达式。或者,您可以使用Python的.endswith()
。您可以output.decode()
获取字符串(而不是bytes.decode(output)
)。