如何检查 Net::Telnet 会话是不是仍在 Perl 中?

Posted

技术标签:

【中文标题】如何检查 Net::Telnet 会话是不是仍在 Perl 中?【英文标题】:How to check Net::Telnet session is still live in Perl?如何检查 Net::Telnet 会话是否仍在 Perl 中? 【发布时间】:2017-07-06 12:01:04 【问题描述】:

我有一个 Perl 脚本,可以通过 Net::Telnet 在远程设备上运行一些命令。有时,由于登录超时或其他原因,远程登录会话会被远程断开。我想知道如何在发送下一个命令之前检查 telnet 会话是否仍然有效?非常感谢!

my $tc = new Net::TelnetHost=>$host,Port=>23;
sub checkTelnetLive  ??? 
my @commands=($cmd1,$cmd2,...);
foreach $cmd(@commands) 
    if checkTelnetLive 
        $tc->put($cmd);
        $tc->waitfor('/COMPLD/');
    
    else 
        die "Remote equipment has disconnected session."
    


【问题讨论】:

timed_out - 超时指示器 $boolean = $obj->timed_out; $prev = $obj->timed_out($boolean); 此方法指示先前的读取、写入或打开方法是否超时。请记住,超时本身就是一个错误。为了能够在超时错误后调用 timed_out(),您必须将默认错误模式更改为“死”以外的其他模式。请参阅 errmode()。如果前一个方法超时,则此方法不带参数返回 1。通过参数它设置指标。通常,只有内部方法设置此指标。 【参考方案1】:
my $tc = new Net::Telnet (Host=> $host, Port=>23, Errmode => 'return' );

或者你可以使用eval

eval 
      my $tc = new Net::Telnet (Host=> $host, Port=>23, Errmode => 'return' );

#. plus other code
;
warn $@ if $@;

【讨论】:

以上是关于如何检查 Net::Telnet 会话是不是仍在 Perl 中?的主要内容,如果未能解决你的问题,请参考以下文章

C如何检查内存地址是不是仍在范围内[关闭]

如何检查 cvs2git 是不是仍在运行?

如何防止健康检查请求在我的数据库中存储不需要的会话?

如何在 Codeigniter 中检查是不是设置了会话?

如何检查会话是不是无效

如何检查会话是不是存在?