2012-05-08 25 views
0

我试图做使用下面的代码在远程机器的文件清单。是否有大小限制通过网络返回的数据:: SSH.exec命令

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命令返回的数据被截断,仅返回文件的部分列表。在我看来,有一个大小限制。任何人都知道我可以如何增加它?

回答

0

您的代码是不完整的,你缺少的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 
+0

对不起,缩进和缺失结束。我认为这个街区不止一次被放弃。至少我所做的实验似乎表明,这只是一次收获。还有什么我需要做的吗? – randomuser

相关问题