我正在使用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给我发送换行符上的文字吗?还是另一种解决方法?
谢谢, 斯图尔特
答案 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