2011-08-19 42 views
2

我在ruby中使用net/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 

,然後我會得到的指令代碼的其餘選項在接下來的讀取,與COMMAND4一起。

有沒有什麼辦法可以讓net/telnet發送給我的文本在換行符上分隔?或者另一種解決方法?

感謝, 斯圖爾特

回答

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