繁体   English   中英

期望:如何取消 `expect_before` 和 `expect_after`?

[英]expect: How to cancel `expect_before` and `expect_after`?

似乎使用expect_beforeexpect_after一次,它们被应用于任何expect跟随,导致意外超时。

所以我想知道:如何取消前面的expect_beforeexpect_after

到目前为止我没有成功的尝试(它似乎仍然匹配" " )是:

expect_after
expect_after { }

还是我完全误解了这个概念?

试图控制一个类似 shell 的程序,这就是我所做的(大致):

  • 当程序回显其输入( $cmd )时,请使用expect_before $cmd
  • 由于程序会在 output 命令后出现提示符( $prompt ),使用expect_after $prompt
  • 使用expect匹配实际命令output

但是有两个例外:

  1. 要求输入密码时,期望输入密码时不会出现$prompt 因此我想取消expect_after 由于密码没有回显,我也想在发送密码时取消expect_before
  2. 退出程序时,执行quit命令后不会有提示,所以想取消expect_after

我认为您误解了 Tcl 大括号。 它们不是特殊的语法,它们只是一种引用机制——它们就像 shell 单引号:内部没有插值。 所以expect_before { }意味着你期待一个空格,并且没有指定任何动作。

我认为,要取消之前的期望,您可以使用不带expect_before的 expect_before。

使用expect_before -info查看当前状态。


要忽略发送的 $cmd,我想你想要

expect_before -ex $cmd {exp_continue}

每次cmd变量更改时,您都需要重新执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM