perl telnet 发送条指令超时问题(重分酬谢)

whynotldch 2010-11-18 10:14:32

我是向交换机发送多条指令.
第一个指令返回的数据比较长,要分屏显示.为什么总会有
NETELNETD_FAILD
执行命令DSP CFG:;超时(30秒)【网元:2029873079】。


指令超时是什么意思?怎么解决?


for(my $u=3;$u<$count_cmdd;$u++)
{
print "array_cmdd: $array_cmdd[$u]\n";

my $timeoutt = 30; # seconds

eval {

local $SIG{ALRM} =

sub { die "Sorry, timed out. Please try again\n" };

alarm $timeoutt;

execCmd($array_cmdd[$u],$u,$t,$restypeid);#我的处理子程序


alarm 0;

};

$t->buffer_empty;

}



sub execCmd{

my ($cmd,$u,$mythread,$typeid) = @_;
my $pre_match_lines;
my $match;

print "execmd $cmd ,$u,\n";

TXT("execmd $cmd,$u\n");



my @linelist = $mythread->cmd("execmd $cmd");


while(my $data=$mythread->get('Timeout'=>10))#设置一个合适的超时,不至于使程序没运行结束而终止等待

{
print($data);

TXT("$data");

if($data=~/reports in total/ and $u eq 3)#此处判断何时程序运行结束
{
return 1;
}
if($data=~/--- END/ and $u > 3)
{
return 1;
}
else
{
return 0;
}



}

}
...全文
276 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2010-11-24
  • 打赏
  • 举报
回复
你在telnet模块中捕捉这行记录Press CTRL+C to break, other key to continue...,以及你同时也应该捕捉命令行提示符,当捕捉到上面的记录后,你应该向网络设备发送一个任意字符,以使命令继续运行,如果捕捉到命令行提示符,你该执行下一跳命令,或者退出telnet,按照你实际的逻辑进行处理。
whynotldch 2010-11-23
  • 打赏
  • 举报
回复
還有,我把Timeout的時候無論怎麼放大或者放小都會超時?
whynotldch 2010-11-23
  • 打赏
  • 举报
回复
my $t = new Net::Telnet(Timeout =>$timeout,Port=> $port,Prompt =>'/[\$#>]/', Errmode => "return");
正則表達式我也有用到不過我對Prompt還是有疑問的,拿我代碼中的Prompt為例:我的理解是一條指令發送的成功如果返回值中有$或#或>任何一個perl 就認為這個指令發送成功.我這樣的理解對嗎?
whynotldch 2010-11-23
  • 打赏
  • 举报
回复
謝謝,fibbery,對我的熱心幫助,你說的先手工的telnet我也試過了,一樣是顯示超時我也是先手工一步步做的然後再加到自己的perl 程序 中的.手工telnet情況如下:

欢迎进入NETelnetD(Version:1.0.3946.20118)服务程序...
Copyright(c) 2005 BOCO. All rights reserved.
服务端:10.238.50.216:7788(启动时间:2010-11-18 17:07:18)
客户端:10.238.185.72:3288

Login:Password:
NETELNETD>NETELNETD_SUCCESS
NETELNETD>
dsp cfg:;
+++ HUAWEI UMG8900 2010-11-23 13:40:32
O&M #2
%%dsp cfg:;%%
RETCODE = 0 accomplished


System configuration in memory
------------------------------
//UMG8900V200R008C02SPC123
ADD FRM: FN=0, FV=SSM256, FT=SWITCH, SHF=0, LOC=BOTTOM, FNM="Central Switch",
="central switch";
ADD BRD: FN=0, SN=0, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=11;
ADD BRD: FN=0, SN=1, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=10;
ADD BRD: FN=0, SN=2, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=9;
ADD BRD: FN=0, SN=3, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=8;
ADD BRD: FN=0, SN=4, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=7;
ADD BRD: FN=0, SN=5, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=6;
ADD BRD: FN=0, SN=10, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=0;
ADD BRD: FN=0, SN=11, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=1;
ADD BRD: FN=0, SN=12, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=2;
ADD BRD: FN=0, SN=13, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=3;
ADD BRD: FN=0, SN=14, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=4;
ADD BRD: FN=0, SN=15, BP=FRONT, BT=FLU, HBT=FLU, BS=NULLBACKUP, BN=5;
ADD BRD: FN=0, SN=0, BP=BACK, BT=BLU, HBT=BLU, BS=ONEBACKUP, BN=0;
ADD BRD: FN=0, SN=2, BP=BACK, BT=BLU, HBT=BLU, BS=ONEBACKUP, BN=1;
ADD BRD: FN=0, SN=4, BP=BACK, BT=BLU, HBT=BLU, BS=ONEBACKUP, BN=2;

Press CTRL+C to break, other key to continue...
NETELNETD_FAILD
执行命令dsp cfg:;超时(30秒)【网元:2029873079】。
NETELNETD>



以上是在CMD中telnet的結果.有一個奇怪的問題,只有這一條命令有這個問題其它都是好的.





fibbery 2010-11-20
  • 打赏
  • 举报
回复
因为Perl在使用telnet模块的时候,都是以正则匹配返回内容决定命令是否执行完成或者说决定该发送什么指令,我想,你应该用真正的telnet程序去演示你要执行的各步骤命令,一步一步的加到Perl程序里,确定每一步都能正确执行后,你的程序也就调试完了。

举个例子:
你执行了一个交换机命令后,输出press key y:,这是交换机等待你输入y,你的程序需要发送一个y过去,可能你的模式匹配没有正确捕捉到这个信息,所以,交换机提示超时。

whynotldch 2010-11-20
  • 打赏
  • 举报
回复
我是向华为的交换机发送的指令,就第一条交换机返回"Receive command response failed,WinSock error code:接收服务器响应超时!"是不是因我第一个指令返回的数据量太大?大概全部返回应该在100KB左右的样子.我的perl 代码向一个网元发送多条指令只有第一个数据返回不完整剩下的指令都正常返回.
whynotldch 2010-11-20
  • 打赏
  • 举报
回复
能说的再详细点吗?
fibbery 2010-11-20
  • 打赏
  • 举报
回复
太专用的程序不方便帮你调试。
fibbery 2010-11-20
  • 打赏
  • 举报
回复
可能在匹配返回串时超时吧。

37,719

社区成员

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

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