2012-09-07 74 views
1

我正在编写一个expect脚本来telnet到路由器,做一些配置,期望一些输出。如何处理tcl预期输出

如果所需的提示不可用,则会等待它并超时。 那么,我该如何处理这个问题,并打印一个错误消息。

set timeout 30; 

puts "Telnet to $IP 2361\n\n"; 
spawn telnet $IP 2361; 

expect ">"; 

send "ACT-USER::$user_name:1::$password;"; 
expect ">"; 

如果未收到期望值,我该如何处理和打印错误消息?

回答

3

与超时处理很好,需要一个稍微复杂的使用expect

expect { 
    ">" { 
     # Got it; don't need to do anything here because we run the code after 
    } 
    timeout { 
     send_user "timed out, oh no!\n" 
     exit 1 
    } 
} 

# Now we put the rest of the script... 
send "ACT-USER....blah" 
# ... 

注意,我很惊讶,你的send\r结束(模拟按下回车关键)。

+0

'发送“Pollers \ r” 期待“>”' 执行上面的行后,我得到了一些像下面的CMD行。 ' “客户端” 轮询器 1) “ICTS_ICEFIX_Worker工作者”(ICTS_ICEFIX_Worker轮询):运行 2) “NYMEX UTBAPI工作者”(NYMEX UTBAPI轮询):STOPPED 输入一个轮询器号码或任何其他键返回到父telnet会话:' 这些上面的行我想存储在一个数组变量,然后我想逐行阅读,并检查是否有NYMEX字。如果那里我需要从该行中删除子字符串,并将数字,NYMEX UTBAPI和UTBAPI存储在一个哈希数组中以进行进一步处理。 – picnic4u