我正在使用expect自动完成一些工作,并且具有以下内容:
# procedure to set background and after patterns
proc foo {} {
expect_after {
-re $regex1 {puts "Matched regex1"; send $command_to_run; exp_continue}
timeout {exp_continue}
}
expect_background {
-re $regex2 {do other things; exp_continue}
-re $regex3 {and more different things; exp_continue}
timeout {exp_continue}
}
}
spawn $thing
foo
expect_user {
-ex "stahp" {exit}
}
在expect_after
模式匹配(并且运行关联的主体)之后,它会无限期挂起。但是,如果我将expect_after
和expect_background
模式移出程序,那么它就像我一样,预期运行。
为什么在放入程序时它的行为会有所不同?
答案 0 :(得分:0)
感谢格伦杰克曼的想法!似乎在程序中调用expect_after
,expect_background
,可能expect_before
时,不仅要查找全局范围内的spawn_id,还需要指定它。
这有效:
proc foo {} {
namespace eval global {
expect_after {
-i $spawn_id -re $regex1 {do things}
}
expect_background {
-i $spawn_id -re $regex2 {do more different things}
-i $spawn_id ...
}
}
}
如果有人能够解释为什么它需要-i $spawn_id
那会很棒,但是对于遇到同样问题的人来说,这是一个解决方法。添加global spawn_id
也应该有效,但我最终使用了这个,因为我有大约5-6个变量,其中一半是我在foo
中修改的。