0

我对 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“请输入播放名称_类型”)。为什么会发生这种情况?如果我移动顶部的第二个代码块(-re“请输入播放名称_类型”),前两个将通过。是什么原因?

并且似乎第三个代码块从未执行过,我在其中添加了一些跟踪,如下所示:puts "executed!!!!",消息从未显示,并且似乎它忽略了第三个代码块并执行了整个期望块下的代码,如何修复它?

4

1 回答 1

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到脚本的顶部。

于 2012-06-19T20:26:29.900 回答