【发布时间】:2014-08-30 14:47:38
【问题描述】:
我已经编写了一个期望函数来获取命令的输出,我的代码如下所示
proc do_cmd {cmd id} {
set spawn_id $id
send "$cmd\r"
expect "$cmd\r"
expect {
-re "\n(.*)\r\n" {return $expect_out(1,string)}
default {exit 1}
}
}
如果我只调用该函数一次,它会正常工作并返回我想要的东西,但如果我连续调用它而不中断,它会返回一些不需要的东西。
# test case 1
set ret [do_cmd $mycmd $spawn_id]
puts "$mycmd returns $ret" # the return value is ok
# test case 2
set ret [do_cmd $mycmd $spawn_id]
set ret [do_cmd $mycmd $spawn_id]
puts "$mycmd returns $ret" # the return value is not something I want
我使用'exp_internal 1'调试它,发现第二个调用命令中的expect_out仍然保留了之前的输出信息并导致匹配问题,那么我该如何清理expect_out缓冲区(我试图设置它一个空字符串,但它不起作用,)或者我还能做些什么来避免这个问题?提前致谢。
【问题讨论】:
-
你不需要
-re "\n(.*)\r\n"来匹配正则表达式吗?因为您使用的是expect_out(1,string) -
糟糕,我错了,谢谢你提醒我