Perl Net :: Telnet捕获一系列命令的输出,只有第一个命令有效

时间:2013-05-28 16:51:52

标签: perl telnet

    my $telnet = new Net::Telnet (Timeout => 5, errmode => 'return', Telnetmode => 0);
    $telnet->open($ip);
    $telnet->waitfor('/Login:.*$/');
    $telnet->print($username);
    $telnet->waitfor('/Password:.*$/');
    $telnet->print($password);
    $telnet->waitfor(-match => '/>.*$/');

print DIAG "\n=co sh========================================================================\n";
    $telnet->print('co sh');
    config:
        while (my $line = $telnet->getline(Timeout => 10)) {
            $line =~ s/-- more --//g;

            if ($line =~ m/>.*$/) {
                last config;
            } else {
                unless ($line =~ m/\[/g) {
                    print DIAG $line;
                }

                $telnet->print(' ');
            }
        }

    print DIAG "\n=sys log show=================================================================\n";
    print $telnet->waitfor(-match => '/>.*$/');

    $telnet->print('sys log show');
    syslog:
        while (my $line = $telnet->getline(Timeout => 10)) {
            $line =~ s/-- more --//g;

            if ($line =~ m/>.*$/) {
                last syslog;
            } else {
                unless ($line =~ m/\[/g) {
                    print DIAG $line;
                }

                $telnet->print(' ');
            }
        }

$telnet->print(' ');跳过你得到的-- more --提示。

我得到第一个命令的输出正常,但在第二个====行之后没有任何内容,除了提示符,已成功到达$telnet->waitfor(-match => '/>.*$/');,显然。

如果我完全注释掉config循环(第一个),它会成功写入第二个systlog循环的输出,为什么?是什么让终端忽略我的第二个命令是发送它$telnet->print('sys log show');?它实际上与登录后的结构相同。

0 个答案:

没有答案