如何处理期望块内的不同输出

How to handle different output inside expect block

在expect脚本中,程序可以根据系统配置给出不同的输出。我需要为不同的输出处理 expect 块内的输出,并相应地提供输入以继续执行程序。有什么方法可以编写 expect 块,以便它可以找到匹配的 patten 并继续进行,其余的其他 patterns 被忽略?

Sample script 

    spawn myprogram
     expect {
                        -re "pattern1" {send -- "str1 \r"}
                        -re "pattern2" {send -- "str2 \r"}
                        -re "pattern3" {send -- "str3 \r"}
               }

此处根据输出中的模式,需要采取措施。

您是否使用那些双破折号强制将 send 的参数解释为字符串?如果是这样,我认为您需要 spaces 在 -- 之后和字符串之前:

expect {
                -re "pattern1" {send -- "str1 \r"}
                -re "pattern2" {send -- "str2 \r"}
                -re "pattern3" {send -- "str3 \r"}
       }

没有 space 它似乎想将第一个 - 之后的所有内容都视为一个大标志。

要回答您的问题,是的,这看起来是一个可行的起点,请按照您的要求进行操作:它将观察 testscript 的输出并等待其中一个正则表达式匹配,或者直到超时到期(因为您没有设置超时期限,默认为 10 秒)或直到收到 EOF。如果其中一个正则表达式匹配,它将分支到匹配表达式后面的代码部分。

如果您习惯于 PCRE 或 Vim...

,请注意 TCL 正则表达式语法