【问题标题】:Expect flushing buffer期望刷新缓冲区
【发布时间】:2013-02-19 06:06:20
【问题描述】:

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

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

    expect -timeout 3 $value {
    } timeout fail
} 

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

【问题讨论】:

  • 为什么不把缓冲区的内容保存在另一个变量中,如果需要,使用正则表达式解析它?

标签: tcl expect


【解决方案1】:

expect 缓冲区变量与其 spawn_id 变量相关联,因此为了确保使用您的 expect_out(buffer),您只需传入 spawn id

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

    expect -i $spawnId -timeout 3 $value {
    } timeout fail
} 

这应该可以解决您的问题。唯一的事情是您需要确保在生成进程时保存 spawn_id

【讨论】:

    【解决方案2】:

    AFAIK 编号

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

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多