2012-03-14 128 views
1

我正在编写一个tcl/expect脚本来检查事件的字符串输出,如果找到,然后做一些事情。以下是我的代码,期待刷新缓冲区

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

    expect -timeout 3 $value { 
    } timeout fail 
} 

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

+0

为什么不把缓冲区的内容保存到另一个变量中,并且如果需要使用正则表达式来解析它呢? – 2012-03-17 19:41:46

+0

请检查答案! – Anonymous 2012-07-18 17:46:40

回答

0

的预期缓冲变量与它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。

+0

你的一个真正的! – Anonymous 2012-06-15 20:12:30

0

AFAIK no。

如果发生超时,则可以通过下一个expect子句搜索缓冲区。但是,如果$ value匹配,那么包括$ value本身在内的所有内容都将从缓冲区中抛出(并打印到用户)。