expect_out(buffer)中包含send的数据

 

expect_out(buffer)中包含send的数据

我一直以为在Expect中一旦执行send之后,expect_out(buffer)就会被清空,直到有新的数据被填入,而恰恰就是这些数据被用在expect语句中。而今天在调试时发现的问题却令我大吃一惊,原来expect_out(buffer)不会被自动清空,而expect到的数据很可能不是你真正想要的,非常有可能是历史数据。"expect_out(buffer) has the content of the previous send" 一文也指出了这个问题。

 

 

比如在我的代码中,有如下片段:
 
无论$ lockfile是否存在,expect总会得到COOLID: 68,而expect_out(buffer)的出如下:

 

由此可见,由于 expect_out(buffer)中含有send的 echo "COOLID: 68" ,因此永远都能匹配到这个数据。

由于没有找到一种可以清空 expect_out(buffer)的方法,无法实时地将 expect_out(buffer)清空。 我能想到的解决方法有两种:一是更改send和expect的内容或方式,避免send的内容中出现expect的模式(pattern)。比如在我的程序中把上述代码段改为:
 
就可以正常工作了。

另一种方法是按照 "expect_out(buffer) has the content of the previous send" 的例子中的方法,set prompt,保持原始代码中send的内容不变,将expect的正则表达式改为  -re "fi( .*) $prompt",如此一来希望的输出就在expect_out(1,string)中了,然后利用string或者lsearch命令对匹配到的数据进行分析。

结论:今后在编写Expect脚本时,不仅要考虑每一步的send/expect,也还要考虑到这一步的expect的内容有可能出现在之前的历史数据中。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值