telnet等交互终端读取缓冲区问题

与设备等交互时常常由于不可见字符和终端提示的异常字符导致promt失效,得不到自己想要获取的信息。

除了使用更精确地提示符和增加行结尾符外,这几天学习了使用select接收,来判断是否终端还有响应信息,更加精确:

use IO::Socket;
use IO::Select;
sub GetDebug()
{
    my $self = shift;
    my $cmd = shift;
    my ($buf,$leftbuf,$i);
    $self->PrintMsg($cmd);
    my $sess = $self->{'sess'};
    my $sel =new IO::Select();
    #将套接字加入到SELECT中
    $sel->add($sess);
    my @ready_socks ;
    #按超时读取返回信息
    while(@ready_socks = $sel->can_read($telnetRead))
    {
        $i=$sess->sysread($buf,1024);
        if($i==0)
        {
          last;
        }
        $leftbuf .= $buf ;
    }
    return $leftbuf;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值