как читать целые строки, используя сеть / телнет ruby? - PullRequest
2 голосов
/ 19 августа 2011

Я использую библиотеку net / telnet в ruby ​​для чтения данных с сервера. Он отправляет команды как целые строки с новой строкой в ​​конце, поэтому я подумал, что сделаю это:

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 Ответ

1 голос
/ 19 августа 2011

Так что это мое текущее решение, я не уверен, что это лучший путь, но он хорошо работает с моим источником данных:

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
...