预计冲洗缓冲液

时间:2012-03-14 14:23:02

标签: tcl expect

我正在编写一个tcl / expect脚本来检查事件的字符串输出,如果找到则执行某些操作。以下是我的代码,

proc cli_detect_event {cmd value} {
    cli_send "$cmd"

    expect -timeout 3 $value {
    } timeout fail
} 

因此,当我发送$ cmd时,我得到的事件应该与$ value匹配。我想要知道是否有一种方法可以防止expect_out(缓冲区)中的内容在此proc之后再次使用时被抛弃,这样我可以期望在我发送的命令的相同输出上匹配?

2 个答案:

答案 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本身都会从缓冲区中抛出(并打印给用户)。