+ -
当前位置:首页 → 问答吧 → perl expect 如何翻屏啊?

perl expect 如何翻屏啊?

时间:2011-01-15

来源:互联网

程序如下:
#!/usr/local/bin/perl
require ("/usr/local/lib/perl5/site_perl/5.8.5/Expect.pm");
print "Content-type:text/html\n\n";
use Expect;
use Net::CIDR::Set;
my $exp = new Expect;

$device_ip=$ARGV[0];
$device_file=$device_ip."-file";

my $exp = Expect->spawn("telnet $device_ip");
$exp->expect(30,
            [qr/name:/=>sub {
                                                 sleep(1);
                                               $exp->send_slow(1,"user\n");
                                                 sleep(1);
                                                $exp->expect("assword");
                                               $exp->send_slow(1,"password\n");
                                              #   sleep(1);
                                                exp_continue;
                          }],
            [qr/>/=>sub {
                                                 sleep(1);
                               $exp->log_file("/home/$device_file");
                                               $exp->send_slow(1,"display ip interface brief\n");
                                                 sleep(1);
                                               $exp->send_slow(1,"\n");
                                                 sleep(1);
                               $exp->log_file(undef);
                               sleep(1);
                               $exp->send("quit\n");
}
];

在telnet设备后,执行display ip interface brief命令后,设备显示出一部分执行结果,但因为结果内容太多,需分屏显示,
如果是人工操作,只要多按几次空格就可以将所有结果显示出来(人是可以看到设备提示符重新出来时,就知道这条命令的结果都显示完了),但在上面的程序里,我写了用回车来让其翻屏,一个回车仅能再多显示一行内容,
(我还不知道如何敲换行符),而且无法去判断什么时候不用再敲回车符了,因为不知道如何判断提示符,因为设备的提示符“>",在前面已经用了,不知道如何写这个敲回车或换行的循环了,请高手帮忙赐教。

作者: zljjg2000   发布时间: 2011-01-15

$exp->send_slow(1,"\r");

作者: wind_ch   发布时间: 2011-01-16