猿问

无法清除 python3.X 中的 pexpect 缓冲区

我正在使用 Pexpect 模块连接到远程服务器。我可以成功发送和检索响应。我试图通过期待一些垃圾来清除缓冲区,并假设它会清除缓冲区,但实际上它并没有清除缓冲区。


下面是我的示例代码


import pexpect

obj = 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 not


except pexpect.TIMEOUT:

    pass

print("buffer is", obj.buffer) . --> This is printing output `OUTPUT 1` as I have meniotned

我在这里做错了什么??我正在使用 python3.7 。如果我没记错的话它在 python2.X 中正常工作


一只甜甜圈
浏览 70回答 2
2回答

至尊宝的传说

您可以通过显式读取 IIRC 来清除 pexpects 缓冲区。flush = ''while not obj.expect(r'.+', timeout=5):    flush += obj.match.group(0)

呼如林

".+" 试图从缓冲区中获取一个或多个字节,因此如果有什么东西就清理掉所有东西。我们运行 while 循环来读取,直到什么都没有。由于超时为零,如果没有任何内容,它会立即返回,但会引发异常,这是循环终止的地方。try:    while True:        session.expect(r'.+', timeout=0)except (pexpect.TIMEOUT, pexpect.EOF) as e:    pass
随时随地看视频慕课网APP

相关分类

Python
我要回答