與設備等交互時常常由於不可見字符和終端提示的異常字符導致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;
}