【问题标题】:how to read whole lines using ruby's net/telnet?如何使用 ruby​​ 的 net/telnet 读取整行?
【发布时间】:2011-10-30 06:40:03
【问题描述】:

我在 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 只向我发送以换行符分隔的文本?或者其他解决方法?

谢谢, 斯图尔特

【问题讨论】:

    标签: ruby 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
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2013-04-21
      • 2014-04-10
      • 2012-08-30
      相关资源
      最近更新 更多