Ruby Telnet - Net :: ReadTimeout:等待更多数据时超时

时间:2016-07-21 09:29:01

标签: ruby-on-rails ruby sockets printing telnet

我正在尝试使用ruby telnet库连接到打印机。我可以使用telnet库成功连接到打印机,但每当我使用cmd关键字库发送命令时,都会返回异常:

  

Net :: ReadTimeout:等待更多数据时超时

我使用以下命令连接到打印机

localhost = Net::Telnet::new("Host" => "192.168.25.168","Port" => 20000, "Timeout" => 10)
status = ""
localhost.cmd("SELECTGROUP 1") {|c| status =  c } 

if status == "ok"
   puts "success"
else
   puts "failure"
end

上面的localhost.cmd命令返回字符串" ok"我期待的,或上述例外。

我想知道如何阻止cmd命令发送超时异常。

1 个答案:

答案 0 :(得分:0)

提升Exception是命令“失败”时的标准行为 - 例如达到超时限制。我相信,你真正想做的是优雅地处理异常。您可以使用rescue

来完成此操作
localhost = Net::Telnet::new("Host" => "192.168.25.168","Port" => 20000, "Timeout" => 10)
status = ""
begin
  localhost.cmd("SELECTGROUP 1") {|c| status =  c }
rescue Net::ReadTimeout
  status = 'timeout'
end

if status == "ok"
   puts "success"
else
   puts "failure"
end

请注意,Net::Telnet#cmd会将收到的数据作为字符串返回,因此您的上述代码实际上可以简化为:

localhost = Net::Telnet::new("Host" => "192.168.25.168","Port" => 20000, "Timeout" => 10)
begin
  if localhost.cmd("SELECTGROUP 1") == 'ok'
    puts 'success'
  else
    puts 'failure'
  end
rescue Net::ReadTimeout
  puts 'timeout'
end