perl telnet 为什么每条指令都发送了但是返回的结果只有每一条的
目标:用perl 中的telnet模块登录交换机向交换机中的一个网元发送多条指令,并将每条指令的结果以.txt 文件的形式保存到磁盘.
第一步:建立一个telnet对象,分配缓存大小,并用用户名登录
my $t = new Net::Telnet(Timeout =>$timeout,Port=> $port,Prompt => '/[\$#>]/', Errmode => "return");
$t -> max_buffer_length("20485760"); #Telnet对象的缓冲区,单位是B字节
my $ok = $t->open("$host");
unless($ok eq 1){
my $errmsg = $t->errmsg();
print STDERR "$errmsg\n";
}
$ok = $t->login($user,$pw);
unless($ok eq 1){
my $errmsg = $t->errmsg();
print STDERR "$errmsg\n";
}
第二步:打开交换机上的一个网元
my @cmd=$t->cmd("open $array_cmdd[1]");
第三步:向交换机发送指令并以.txt的形式保存在本机.
my @lines1={};
FORX1: for(my $u=3;$u<$count_cmdd;$u++)#$array_cmdd是存放网元的一些信息,从第三个数组元素开始存放的是指令所以要#从3开始
{
while(1)#这是个死循环,主要是指令发送后,要分屏显示,我要一直到交换机返回的结束符才跳出这层循环执行下条指令
{
@lines1 = $t->cmd("execmd $array_cmdd[$u]");
my $count_lines = scalar (@lines1);
print "count_lines: $count_lines\n";
print @lines1;
TXT(@lines1); #这是我的子程序用于写入磁盘以.txt文件的形式
foreach $nextline(@lines1) # 从结果数组中读取每一行遇到如下的标示跳出循环执行下一条指令.
{
if($restypeid eq "2872")
{
next FORX1 if $nextline =~/reports in total/;
next FORX1 if (($nextline =~/--- END/) and ($u>3));
}
else
{
print "3243434\n";
next FORX1 if $nextline =~/--- END/;
}
}
}
}
$t->cmd ("close");
$t->cmd ("quit");
#把指令结果返回来
sub TXT {
my (@text) =@_;
#print "$text\n";
#close HLOG if defined HLOG;
open(HLOG,">>D:/TEST/$filename.txt") or die("打开日志文件出错:文件名为 $filename ;错误原因为: $!");
print HLOG "@text";
}