Tcl 预期刷新缓冲区

Tcl 预期刷新缓冲区,tcl,expect,Tcl,Expect,我正在编写一个tcl/expect脚本,以检查事件的字符串输出,如果找到,则执行一些操作。下面是我的代码 proc cli_detect_event {cmd value} { cli_send "$cmd" expect -timeout 3 $value { } timeout fail } 所以当我发送$cmd时,我会得到和$value匹配的事件。我想知道在这个过程之后再次使用expect时,是否有一种方法可以防止expect_out(缓冲区)中的内容被丢弃,

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

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

    expect -timeout 3 $value {
    } timeout fail
} 

所以当我发送$cmd时,我会得到和$value匹配的事件。我想知道在这个过程之后再次使用expect时,是否有一种方法可以防止expect_out(缓冲区)中的内容被丢弃,这样我就可以期望与我发送的命令的相同输出相匹配?

expect buffer变量与其spawn_id变量相关联,从而确保您的expect_out(缓冲区)如果已使用,则只需传入繁殖id

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

    expect -i $spawnId -timeout 3 $value {
    } timeout fail
} 
这将解决您的问题。唯一的问题是,您需要确保在生成进程时保存spawn_id


如果发生超时,则可以通过next expect子句搜索缓冲区。但是,如果$value匹配,那么到目前为止的所有内容(包括$value本身)都将从缓冲区中丢弃(并打印给用户)。

为什么不将缓冲区的内容保存在另一个变量中,并在需要时使用正则表达式对其进行解析?