为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2022-07-19 15:40:23
我正在使用 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)


查看完整回答
反对 回复 2022-07-19
?
呼如林

TA贡献1798条经验 获得超3个赞

".+" 试图从缓冲区中获取一个或多个字节,因此如果有什么东西就清理掉所有东西。

我们运行 while 循环来读取,直到什么都没有。

由于超时为零,如果没有任何内容,它会立即返回,但会引发异常,这是循环终止的地方。

try:

    while True:

        session.expect(r'.+', timeout=0)

except (pexpect.TIMEOUT, pexpect.EOF) as e:

    pass


查看完整回答
反对 回复 2022-07-19
  • 2 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信