如何使用ruby的net / telnet读取整行?

时间:2011-08-19 01:55:37

标签: ruby telnet

我正在使用ruby中的net / telnet库从服务器读取数据。它发送命令作为整行,最后用换行符,所以我想我会这样做:

connection = Net::Telnet.new(options)

connection.waitfor(/\n/) do |txt|
  process txt
end

这不起作用,因为它一次性向我发送了一大堆行。我可以通过以下方式轻松解决这个问题:

connection.waitfor(/\n/) do |txt|
  txt.split("\n").each do |line|
    process line
  end
end

除了这个问题之外:我发送的字符串最后总是包含半个命令。即:如果服务器发送了这个:

COMMAND1 option1 option2 option3
COMMAND2 option1 option2 option3
COMMAND3 option1 option2 option3

我经常会这样:

COMMAND1 option1 option2 option3
COMMAND2 option1 option2 option3
COMMAND3 opt

然后我将在下一次阅读中获得COMMAND3的其余选项,以及COMMAND4。

有什么办法可以让net / telnet给我发送换行符上的文字吗?还是另一种解决方法?

谢谢, 斯图尔特

1 个答案:

答案 0 :(得分:1)

所以这是我目前的解决方案,我不确定这是否是最好的方法,但它在我的实时数据源上运行正常:

connection = Net::Telnet.new(options)

all_text = ""
while running do
  connection.waitfor(/\n/) do |server_text|
    all_text += server_text
    while cmd = all_text.slice!(/^.*\n/) do
      process cmd
    end
    # any half-command remains in all_text at this point
  end
end