Telnet不会关闭连接

时间:2014-12-13 13:40:36

标签: ruby telnet

使用简单的ruby脚本 - 从memcacheq服务中提供队列列表。

require 'net/telnet'

host = Net::Telnet::new("Host" => "127.0.0.1", "Port" => 22201, "Telnetmode" => false)
host.cmd("stats queue") { |q| puts q }
host.close

有下一个输出

STAT email_v2_websiteusers 4770/4770
STAT media_casting 7444/7444
STAT encoder_v1_job 7479/7479
STAT pg_generator 163/163
STAT streaming_session_stats 163756/163756
STAT pg_export 150/150
END

但是脚本没有关闭,它等了几秒钟并返回错误:

/usr/lib/ruby/1.9.1/net/telnet.rb:558:in `waitfor': timed out while waiting for more data (Timeout::Error)
    from /usr/lib/ruby/1.9.1/net/telnet.rb:695:in `cmd'
    from memcacheq-metrics.rb:18:in `<main>'

为什么在close命令后没有关闭连接?

1 个答案:

答案 0 :(得分:2)

正在寻找"Prompt"正则表达式,知道命令已经完成。

来自文档:

  

提示/匹配
  与主机的命令行提示符序列匹配的正则表达式。 Telnet类需要这一点来确定命令的输出何时完成且主机是否准备好接收新命令。默认情况下,此正则表达式为/[$%#>] z/n

由于stats queueEND结尾,所以此类内容应该有效。

# Change cmd to wait for "END"
host.cmd("String" => "stats queue", "Match" => /^END/) { |q| puts q }
host.close