期待脚本全局错误记录

时间:2016-09-12 09:54:18

标签: logging automation expect

我想为我的expect脚本实现错误处理。 我的主要问题是expect命令只等待而不是在它们不匹配时中止。我想出了如何对超时作出反应。

expect {
  timeout exit
  "Name."
}

我必须为每个expect命令指定一个超时操作。 有没有办法为每个expect命令定义一个全局行为?

我想记录收到的输出和上一个发送命令

1 个答案:

答案 0 :(得分:1)

您可以使用expect_afterexpect_before

  

expect_after [expect_args]

     
    

expect_before 的工作方式相同,只是模式      从期望 expect_after 可以匹配, expect 模式      用来。

  
     

expect_before [expect_args]

     
    

采用与 expect 相同的参数,但它会返回     立即。来自最新 expect_before 的模式 - 动作对     具有相同的spawn id隐式添加到任何后续     期待命令。如果模式匹配,则将其视为模式     已在 expect 命令本身中指定,并且已关联     body在 expect 命令的上下文中执行。如果     来自 expect_before 期望的模式可以匹配,     使用了 expect_before 模式     ......

  

以下是一个简单的例子:

[STEP 101] $ cat foo.exp
spawn bash --noprofile --norc
expect_after timeout {
    incr n_timeout
    send "echo 'timeout #$n_timeout'\r"
}

set timeout 2
set n_timeout 0
expect {
    foo {}
}
expect {
    bar {}
}

send "exit\r"
expect eof
[STEP 102] $ expect foo.exp
spawn bash --noprofile --norc
bash-4.3$ echo 'timeout #1'
timeout #1
bash-4.3$ echo 'timeout #2'
timeout #2
bash-4.3$ exit
exit
[STEP 103] $