我有一台我远程登录的机器,然后通过" ctrl + C"直到我看到提示。 ctrl + C可能并不总是有效,所以我必须每隔5秒尝试一次,直到看到预期的输出($ prompt)。
如果我没有得到$提示,我如何确保我可以有效地重试while循环?此代码是否为最佳做法?我担心的是,我不知道当" ctrl + C"失败,它可能是任何东西,除非它是$提示,否则必须忽略它。
while { $disableFlag == 0 } {
send "^C\r"
expect {
"*$prompt*" {
puts "Found the prompt"
sleep 5
}
"*" {
set disableFlag 1
puts "Retrying"
sleep 5
}
}
}
答案 0 :(得分:0)
你可能想要这样的东西(未经测试)
set timeout 5
send \03
expect {
"*$prompt*" {
puts "found the prompt"
}
timeout {
puts "did not see prompt within $timeout seconds. Retrying"
send \03
exp_continue
}
}
# do something after seeing the prompt
\03
是ctrl-C的八进制值:请参阅http://wiki.tcl.tk/3038
如果你想最终摆脱困境:
set timeout 5
set count 0
send \03
expect {
"*$prompt*" {
puts "found the prompt"
}
timeout {
if {[incr count] == 10} { # die
error "did not see prompt after [expr {$timeout * $count}] seconds. Aborting"
}
puts "did not see prompt within $timeout seconds. Retrying"
send \03
exp_continue
}
}