perl telnet 为什么每条指令都发送了但是返回的结果只有每一条的

whynotldch 2010-11-13 05:02:24

目标:用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";

}

...全文
121 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
whynotldch 2010-11-16
  • 打赏
  • 举报
回复
好心PERL大哥大姐,可怜可怜我这个小乞丐吧!求回复,当以身相许!

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧