2014-09-10 59 views
0

我正在使用Perl來自動化一些思科路由器上的腳本。基本的實現是它連接到一個給定的路由器列表,一個接一個地收集所需的信息。每次腳本連接到新路由器時,它都會請求一個密碼,這對所有路由器都是一樣的。Perl - 重複expect()直到輸入被接受

我有以下代碼捕獲密碼請求輸入密碼:

$session->expect(5, 
     [ 'password:' => sub { 
      $session->send("$password\r"); 
       #exp_continue; 
      }]); 

的問題是,有時密碼不被接受的第一次,無論出於何種原因。有沒有辦法重複上述代碼,直到密碼被接受?

回答

2

超級簡單的實現:

my $tries = 0; 
my $max = 5; 
while ($tries < $max) { 
    $tries++; 
    # do your stuff 
    # assuming that you can assess the success of the password sending: 
    last if <test for successful condition>; 
} 

您可以設置的嘗試到什麼是適合您的情況的最大數量。

+0

這是更多的問題,詢問是否期望返回的東西,可能表明輸入密碼失敗,但無論如何謝謝!我在一個while循環中使用了期望,它繼續嘗試,直到某些輸出內容僅在設備登錄時才輸出。 – DJDMorrison 2014-09-12 23:38:41