4

を使ったプログラムを書いているのですNet::Telnetが、41行目で使おうとすると$tel->cmdエラーになります。

CoyoteBridge4000.pl 行 41 でコマンドがタイムアウトしました

コマンドは有効ですが、出力が大きいため、タイムアウトが発生したと思います。それを解決するにはどうすればよいですか?? タイムアウトを変更しようとしたため、問題は解決しません。

#!/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 ($@) {
    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";
4

1 に答える 1

1

コンストラクターでタイムアウト オプションを使用してみましたか?

ポッドから:

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

値は秒単位です。そのコマンドからの応答を待っているだけで、コマンドがタイムアウトになっているのではないかと思います。デフォルトのタイムアウトは 10 秒です。

于 2013-08-23T18:27:38.833 に答える