我正在使用 Pexpect 模块连接到远程服务器。我可以成功发送和检索响应。我试图通过期待一些垃圾来清除缓冲区,并假设它会清除缓冲区,但实际上它并没有清除缓冲区。下面是我的示例代码import pexpectobj = pexpect.spawn("telnet 172.16.250.250", maxread=8192)obj.sendline("")result = obj.expect(expected, timeout=3) --> getting output here `OUTPUT 1`obj.sendline("1")time.sleep(3)try: obj.expect("Asdfgdsad", timeout=2) --> I am expecting to clear buffer here but it did notexcept pexpect.TIMEOUT: passprint("buffer is", obj.buffer) . --> This is printing output `OUTPUT 1` as I have meniotned我在这里做错了什么??我正在使用 python3.7 。如果我没记错的话它在 python2.X 中正常工作
2 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
您可以通过显式读取 IIRC 来清除 pexpects 缓冲区。
flush = ''
while not obj.expect(r'.+', timeout=5):
flush += obj.match.group(0)
呼如林
TA贡献1798条经验 获得超3个赞
".+" 试图从缓冲区中获取一个或多个字节,因此如果有什么东西就清理掉所有东西。
我们运行 while 循环来读取,直到什么都没有。
由于超时为零,如果没有任何内容,它会立即返回,但会引发异常,这是循环终止的地方。
try:
while True:
session.expect(r'.+', timeout=0)
except (pexpect.TIMEOUT, pexpect.EOF) as e:
pass
添加回答
举报
0/150
提交
取消