2

zip ファイルをダウンロードし、進行状況バーを標準出力に出力するための ruby​​ bash スクリプトがあります。私は次のものを持っています

# Temp file name
tmp = ActiveSupport::SecureRandom.hex(8)
file = temp_dl_dir+tmp+'.zip'

print file.inspect

# Download
progress_bar = nil
open(file, 'w', :content_length_proc => lambda { |length|
  if length && 0 < length
    progress_bar = ProgressBar.new('...', length)
    progress_bar.file_transfer_mode
  end 
},
:progress_proc => lambda { |progress|
  progress_bar.set(progress) if progress_bar
}) do |fo|
    fo.print open(dl).read
end

しかし、私がそれを実行すると、

open-uri.rb:32:in `initialize': can't convert Hash into Integer (TypeError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open_uri_original_open'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:32:in `open'
    from ./site.rb:191 (line 191 is the open(file, 'w' ...) one)

open(file, 'w' ...これは、機能に問題があることを意味します

何が悪いのかわかりません+_+

4

1 に答える 1

4

:content_length_procに関連しているようOpenURI::OpenRead#openです。(チェックしてri openから を検索してください:content_length_proc。)

この方法に関する私のriドキュメントには、次のように書かれています。

ただし、(まだ) 書き込みモードをサポートしていないmodeため、読み取りモードである必要があります。OpenURI::OpenRead#openまたperm、ファイルの作成にのみ意味があるため、無視されます。

OpenURI::OpenRead#openしたがって、 with'w'モードは使用できません。それが実際の目標である場合は、別のメカニズムを使用して URL に書き込む必要があります。(英語の説明では、ファイルをダウンロードしようとしていると書かれていますが、その場合'w'、メソッドにモードを使用していませんOpenURI::OpenRead#open...)

于 2012-06-28T22:10:04.530 に答える