【问题标题】:Is there a size limit for data returned by Net::SSH.exec commandNet::SSH.exec 命令返回的数据是否有大小限制
【发布时间】:2012-05-08 09:36:33
【问题描述】:

我正在尝试使用以下代码列出远程机器的文件。

Net::SSH.start(host_name, 'ec2-user') do |ssh|
  cmd = "ls #{get_ls_command(dir_loc, extension)}"
  ssh.exec!(cmd) do |channel, stream, data|
  if stream == :stderr
    # do something -- and error has been raised. 
    # for now raise an exception 
    puts data
    raise "Error in fetching file data"
 end
 return data.split("\n")
end

如果文件数量很大,则从 exec 命令返回的数据将被截断,并且只返回文件的部分列表。在我看来,有一个大小限制。任何人都知道我可以如何增加它?

【问题讨论】:

    标签: ruby ssh ls net-ssh


    【解决方案1】:

    您的代码不完整,您缺少end 并且有一个不代表实际嵌套的“错误”缩进。不过,我会尽量使用我们所拥有的

    该方法将接收到的数据以块的形式生成到块中。在您的 return 语句中,data 实际上指向最后返回的所述数据块。这意味着您的代码仅在块仅产生一次时才会意外工作(它最多使用 8000 字节的 iirc)。

    为了确保多次收益的安全,您必须首先完整地收集数据,然后正确处理它。你可以这样做:

    Net::SSH.start(host_name, 'ec2-user') do |ssh|
      cmd = "ls #{get_ls_command(dir_loc, extension)}"
    
      result = ""
      ssh.exec!(cmd) do |channel, stream, data|
        if stream == :stderr
          # do something -- and error has been raised. 
          # for now raise an exception 
          puts data
          raise "Error in fetching file data"
        end
        result << data
      end
    
     return result.split("\n")
    end
    

    【讨论】:

    • 很抱歉缩进不好和缺少结尾。我不认为该块被超过一次。至少我所做的实验似乎表明它只产生了一次。我还有什么需要做的吗?
    猜你喜欢
    • 2010-12-27
    • 2013-12-13
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多