我正在尝试使用以下代码执行远程计算机的文件列表。
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 :(得分: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