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;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章