2012-05-08 10 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は、実際には、そのデータの最後に返されたチャンクを指しています。つまり、あなたのコードは、ブロックが1回だけ生成された場合(これは多くても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

悪い字下げや欠落については申し訳ありません。私はブロックが何度も降伏したとは思わない。私がやった実験では、ちょうど1回しか得られないことを示唆しているようです。私は何か他に何かする必要がありますか? – randomuser

関連する問題