与设备等交互时常常由于不可见字符和终端提示的异常字符导致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;
}