2012-05-08 2 views
0

아래 코드를 사용하여 원격 컴퓨터의 파일 목록을 만들려고합니다. Net :: 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

관련 문제