开发者

how to read whole lines using ruby's net/telnet?

I'm using the net/telnet library in ruby to read data from a server. It's sending commands as whole lines with a newline at the end, so I thought I'd do this:

connection = Net::Telnet.new(options)

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

That doesn't work because it sends me a whole bunch of lines all at once. I can fix that fairly easily by instead doing:

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

Except there's a problem with that too: the string I'm sent almost always contains half a command at the end. i.e.: if the server was sending this:

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

I'll often get this:

COMMAND1 option1 op开发者_JAVA百科tion2 option3
COMMAND2 option1 option2 option3
COMMAND3 opt

and then I'll get the rest of COMMAND3's options in the next read, along with COMMAND4.

Is there any way I can get net/telnet to just send me text delimited on the newlines? Or another way to fix this?

Thanks, Stewart


So this is my current solution, I'm not sure if it's the best way to go but it works okay on my live data source:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜