2012-09-07 117 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