2017-10-04 7 views
0

私はルビーから次のコードを実行する必要があります:私は、このコマンドを実行するとruby​​でwgetの出力を取得するにはどうすればよいですか?

system "wget http://example.org/some/large/archive.zip" 

私は

は「wgetのログ」に出力をリダイレクトご覧ください。私はどのように私はルビープロセスを実行し、端末でのwgetの出力を見ることができますか?進捗

を見るためにtail -f wget-logを行う必要があり

私は

system "wget -O - http://example.org/some/large/archive.zip > dev/null" 

を試みたが、それは

はたぶんルビーとの大きなアーカイブをダウンロードして、進行状況を確認するために、他のオプションがあります助けにはなりませんでしたか?

答えて

1

Open3モジュールを使用できます。これはRubyの標準ライブラリにあります。

このは、別のプログラムを実行しているときに、子プロセスを待つためにstdout、stderr、終了コードとスレッドにアクセスできます

だから、あなたのような何かを行うことができますpwdコマンドを持つ:

require 'open3' 
stdout, stderr, status = Open3.capture3('pwd') 
puts stdout # ~/ current directory 
puts stderr # no error 
puts status # pid 25522 exit 0 
+0

と 'Open3.capture3'が私のためにwgetでは動作しませんでした。これは 'Open3.capture2( 'wget http://example.org/some/large/archive.zip')' – Hirurg103

+0

で動作します。若干異なります。 –

0

ルビー内蔵のLIBSあなたがnet/httpを使用することができ、ファイルをダウンロードするには、たとえば、HTTPのもののいずれかの種類を作るために良いを提供します。 wget

require 'net/http' 
require 'uri' 

uri = URI(URI.encode("http://example.org/some/large/archive.zip")) 
Net::HTTP.start(uri.host,uri.port) do |http| 
    request = Net::HTTP::Get.new uri.path 

    http.request request do |response| 
    open "/tmp/my_large_file.zip", 'w' do |io| 
     response.read_body do |chunk| 
     puts "Writing #{chunk.length} bits ..." # see progress 
     io.write chunk 
     end 
    end 
    end 
end 

あなたのRubyコードでHTTPエラーのいずれかの種類をキャッチすることができない。*

あなたのRubyコードの例のための基本的な認証を行うことあなたができない wget で3210

、。

使用Rubyは内蔵のLIBS *、それは非常に強力です。

あなたことができますが、いくつかのバグのあるコード

関連する問題