2013-02-15 147 views
4

我正在編寫一個使用Net::Telnet的程序,但是當我嘗試在第41行中使用$tel->cmd時,發生錯誤。Perl Net :: Telnet在超大命令輸出時超時

命令超時在CoyoteBridge4000.pl線41

的COMAND是有效的,但產量大,這就是爲什麼我認爲發生超時。我能做些什麼來解決這個問題?由於我試圖改變超時時間,並沒有解決問題。

#!/usr/bin/perl 
use Net::Telnet(); 
$tel = new Net::Telnet(); 

print "\nFile Name\n\n"; 
my $name = <>; 
chomp $name; 

my @equipament; 
my $i  = 0; 
my $username = "admin"; 
my $passwd = "zhone"; 
my $certo = 0; 
$co = "bridge show vlan 4000"; 

open(arquivo, "ip.txt"); 
my $i = 0; 
while (<arquivo>) { 
    $equipament[$i] = $_; 
    chomp $equipament[$i]; 
    $i++; 
} 
close(arquivo); 

open(resp, ">$name.csv"); 
foreach (@equipament) { 
    eval { $tel->open($_); }; 
    if ([email protected]) { 
    chomp $_; 
    print resp "$_, UNREACHABLE\n"; 
    } 
    else { 
    open(re, ">temp.txt"); 
    $tel->login($username, $passwd); 
    ###ERROR### 
    @lines = $tel->cmd(String => "$co", Timeout => 600); 
    #####ERROR##### 
    print re @lines; 
    close(re); 
    open(re, "temp.txt"); 
    $encontrar = ":"; 
    while (<re>) { 
     if ($_ =~ /$encontrar/) { 
     chomp $_; 
     print resp $_; 
     } 
    } 
    close(re); 
    } 
} 
close(resp); 

print "\n\n DONE \n\n"; 
+0

程序在超時前等待十分鐘嗎? – Borodin 2013-02-15 21:11:07

+1

問題解決了,這是一個設備問題 – user2076234 2013-02-27 12:28:09

回答

1

您是否嘗試過在構造函數中使用超時選項?

從POD:

Net::Telnet->new(-timeout => 20);

該值是以秒。我懷疑你可能只是讓命令等待等待該命令的響應。默認的超時時間是10秒。