Expect的full_buffer

 

今天用Expect从一大堆输出中提取数据时出现问题,我是先把输出存入Tcl的一个字符串中再提取的,于是打印该字符串,发现只是屏幕输出的后一部分(而我想提取的值是在前半部分)。

起先以为是Tcl的字符串长度有限制,于是搜索“tcl字符串长度最大值”,未果,

后来改用GG搜索"tcl string length max",在一老外的论坛上有了结论,结论是Tcl对字符串长度可以说没有限制,达到21E多(4字节的int表示范围)。

于是怀疑是Expect的问题,

打印Expect_out(buffer)发现确实只保留了屏幕输出的后一部分,

在一个繁体网站上找到一个Match_max命令,以此为线索查看《Exploring Expect》,有个命令叫Match_max,可以设置匹配的最大长度

自己设置后没有效果,加-d后也不行,不知道为什么。。。

用Match_max搜索GG,有个老外碰到类似的问题,回答者是用full_buffer搞定的,看代码:

set mybuff ""
expect {
-re {.*00\-\->} {
append mybuff $expect_out(buffer);
}
full_buffer {
append mybuff $expect_out(buffer);
# continue as only place to break out is match above and eof
exp_continue
}
eof {
append mybuff $expect_out(buffer);
puts "eof [string length $mybuff ]"
}

}

其大概思想是出现full_buffer时就把expect_out(buffer)缓存起来,最后再将mybuff返回,

照此改造了下代码,OK

但我的代码有时是走不到full_buffer这个分支里面的,也就是改造之前大概有一半概率是能执行成功的,不知道为什么。。已经折腾了一天,先不纠结这个了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值