【问题标题】:Expect Script Order of Operations期望脚本操作顺序
【发布时间】:2012-05-19 02:07:13
【问题描述】:

首先,我承认我已经使用它大约 3 天了,期待脚本非常新。我拿起了 O'Reilly 的书,正在努力完成它。但是我对期望的流程有点困惑,并希望得到一些指导。

我在下面有以下代码片段。 if 语句的上半部分运行良好。但是 elseif 部分不能按预期工作。它执行,只是乱序。它首先处理 puts 行,然后通过 send 命令向下运行。我想知道它为什么这样做以及如何使其按顺序执行。

我还想做的另一个调整是,当 $MD5 不匹配时,我不想等待超时。所以基本上我希望 $MD5 或任何不是 $MD5 的东西,这样我就不必坐在那里等待默认超时。我意识到我可以期待 -timeout 1 "$MD5" 并缩短窗口,但我想知道是否有更优雅的方式来处理这个问题。

提前谢谢你。

expect "$MD5"
if {$MD5 == $expect_out(0,string)} {
    send "config t\r";
    send "no boot system\r";
    send "boot system flash:$IOS\r";
    send "exit\r";
    send "wr mem\r";
    expect "OK";
    send "exit\r";
    puts -nonewline "\nIOS Upgrade Successful and Bootvar changed.\n"
    exit
} elseif {$MD5 != $expect_out(0,string)} {
    send "delete flash:$IOS\r";
    send "\r";
    send "\r";
    send "exit\r";
    puts -nonewline "\nIOS Upgrade FAILED MD5 Hash did not match!\n";
    expect eof
    exit
}

【问题讨论】:

  • 感谢您的回复。清理以下代码:expect "$MD5" if {$MD5 == $expect_out(0,string)} { send "config t\r" send "no boot system\r" send "boot system flash:$IOS\r" send "exit\r" send "wr mem\r" expect "OK" send "exit\r" puts -nonewline "\nIOS Upgrade Successful and Bootvar changed.\n" exit } else { send "delete /force flash:$IOS\r" send "exit\r" expect eof puts -nonewline "\nIOS Upgrade FAILED MD5 Hash did not match!\n" exit }

标签: tcl expect


【解决方案1】:

Expect 实际上异步处理send,具体取决于生成的应用程序实际接受数据的速度(也有一些其他的速率限制器)。为了让事情等待,您需要使用expect

解决方法是将puts 放在expect eof 之后(或预先放置其他内容的expect,例如执行delete flash:… 后得到的提示)。

【讨论】:

  • 虽然您可以一次等待多个事情(请参阅expect manpage 上的示例了解如何),但您不能轻易等待的是“任何意外”,因为您太容易得到错误匹配(例如,来自您想要的前缀)。
猜你喜欢
  • 2017-10-05
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多