我正在编写一个tcl / expect脚本来检查事件的字符串输出,如果找到则执行某些操作。以下是我的代码,
proc cli_detect_event {cmd value} {
cli_send "$cmd"
expect -timeout 3 $value {
} timeout fail
}
因此,当我发送$ cmd时,我得到的事件应该与$ value匹配。我想要知道是否有一种方法可以防止expect_out(缓冲区)中的内容在此proc之后再次使用时被抛弃,这样我可以期望在我发送的命令的相同输出上匹配?
答案 0 :(得分:0)
expect缓冲区变量与其spawn_id变量相关联,因此为了确保使用expect_out(缓冲区),您只需传入spawn id
proc cli_detect_event {cmd value spawnId } {
cli_send "$cmd"
expect -i $spawnId -timeout 3 $value {
} timeout fail
}
这应该可以解决您的问题。唯一的事情是你需要确保在生成进程时保存spawn_id
答案 1 :(得分:0)
AFAIK no。
如果发生超时,则可以通过next expect子句搜索缓冲区。但是如果$ value匹配,那么到目前为止的一切,包括$ value本身都会从缓冲区中抛出(并打印给用户)。