Ruby Net::SSH.exec命令返回的数据是否有大小限制

Ruby Net::SSH.exec命令返回的数据是否有大小限制,ruby,ssh,ls,net-ssh,Ruby,Ssh,Ls,Net Ssh,我正在尝试使用下面的代码列出一台远程机器的文件 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 n

我正在尝试使用下面的代码列出一台远程机器的文件

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命令返回的数据将被截断,并且只返回部分文件列表。在我看来,有一个尺寸限制。有人知道我怎样才能增加吗

您的代码不完整,您缺少一个
结尾
,并且有一个不代表实际嵌套的“错误”缩进。不过,我会尽量利用我们现有的资源

该方法将接收到的数据分块发送给块。在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
Net::SSH.start(主机名,'ec2用户')do | SSH|
cmd=“ls#{get_ls_命令(dir_loc,扩展)}”
result=“”
ssh.exec!(cmd)do |通道、流、数据|
如果流==:stderr
#做点什么,错误就出现了。
#现在提出一个例外
放置数据
引发“获取文件数据时出错”
终止

结果:很抱歉缩进不正确,缺少结尾。我不认为这个区块不止一次屈服。至少我所做的实验似乎表明,这只发生了一次。我还有别的事要做吗?