如何处理Expect块中的不同输出

时间:2018-12-26 08:54:07

标签: tcl expect

在Expect脚本中,程序可以根据系统配置提供不同的输出。我需要处理Expect块中用于不同输出的输出,并相应地提供输入以继续执行程序。是否有某种方法可以期望代码块可以编写,以便它可以找到匹配的模式,然后继续执行并休息其他模式?

Sample script 

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

在此基于输出中的模式,需要采取措施。

1 个答案:

答案 0 :(得分:1)

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

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

在没有空格的情况下,似乎希望将第一个-之后的所有内容都视为一个大标志。

要回答您的问题,是的,这似乎是可行的起点,请按照您的要求进行操作:它将监视testscript的输出,并等到其中一个正则表达式匹配或直到超时到期(由于未设置超时期限,因此默认为10秒)或直到收到EOF。如果其中一个正则表达式匹配,它将分支到匹配表达式之后的代码部分。

如果您习惯使用PCRE或Vim ...,请小心使用TCL regex语法。