如何处理期望块内的不同输出
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 正则表达式语法
在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 正则表达式语法