我对TCL / EXPECT中的以下代码有疑问:
expect {
timeout {
puts "timeout error"
}
-re "Please enter the play name" {
exp_send $common1
exp_continue
}
-re "Please enter the play name_type" {
exp_send $common2
exp_continue
}
-re "Now you can get the information of the play" {
expect {
-re "\r"
}
}
}
如果我运行上面的代码,它将被卡在第二个代码块(-re“请输入play name_type”)。为什么会这样?如果我在顶部移动第二个代码块(-re“请输入play name_type”),前两个将通过。是什么原因?
好像第三个代码块永远不会被执行,我在其中添加了一些跟踪:puts "executed!!!!"
,消息永远不会显示,并且似乎忽略了第三个代码块并执行了下面的代码整个期待块,如何解决?
答案 0 :(得分:0)
由于第一个模式是第二个模式的子字符串,因此第一个模式将匹配两次。使用expect -re
时,通常建议匹配一行的结尾,所以
expect {
timeout {
puts "timeout error"
}
-re "Please enter the play name: $" {
exp_send $common1
exp_continue
}
-re "Please enter the play name_type: $" {
exp_send $common2
exp_continue
}
-re "Now you can get the information of the play.*\r"
}
# continue processing here
我假设问题以冒号,空格和行尾结束。相应调整。
我通常建议:在调试或开发程序时,将exp_internal 1
添加到脚本的顶部。