繁体   English   中英

如何获得wget在ruby中的输出?

[英]How do I get wget output in ruby?

我需要从ruby运行以下代码:

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

当我运行此命令时,我看到

将输出重定向到“ wget-log”。

我需要做tail -f wget-log以查看进度

如何在运行ruby进程的终端中看到wget输出?

我试过了

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

但这没有帮助

也许还有其他选择可以下载带有ruby的大型档案并查看进度?

您可以使用Ruby的标准库中的Open3模块。

这使您可以访问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

ruby提供了一个很好的内置库来制作任何类型的http东西,例如下载文件,您可以使用net/http

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

使用wget 您将无法在ruby代码中捕获任何形式的http错误。*

使用wget 您将无法进行身份验证,例如在ruby代码中进行基本认证。*

使用Ruby内置库,它非常强大。

您可以但有一些错误代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM