zoukankan      html  css  js  c++  java
  • the progressbar and Tempfile

    https://github.com/peleteiro/progressbar

    gem install progressbar

    gem 'progressbar', '~> 0.21.0'

    % irb --simple-prompt -r progressbar
    >> pbar = ProgressBar.new("test", 100)
    => (ProgressBar: 0/100)
    >> 100.times {sleep(0.1); pbar.inc}; pbar.finish
    test:          100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10
    => nil
    
    >> pbar = ProgressBar.new("test", 100)
    => (ProgressBar: 0/100)
    >> (1..100).each{|x| sleep(0.1); pbar.set(x)}; pbar.finish
    test:           67% |oooooooooooooooooooooooooo              | ETA:  00:00:03
    
    >> ProgressBar.new("test", 100) do |pbar|
    >>   100.times { sleep(0.1); pbar.inc }
    >> end
    test:          100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10

    def download_apk!
      require 'open-uri'
      require 'digest'
      require 'fileutils'

      return false if is_dead_download_url?
      return false if is_apk_downloaded?

      tmp_file = Tempfile.new [package_name, ".apk"]
      File.open(tmp_file, 'wb') do |file_to_save|
        pbar = nil

        open(download_url, "rb", :content_length_proc => lambda {|t|
          if t && 0 < t

            pbar = ProgressBar.new("...", t)
         pbar.file_transfer_mode
          end
        },
        :progress_proc => lambda {|s|
          pbar.set s if pbar
        }) { |file_to_download| file_to_save.write(file_to_download.read) }  
      end

      apk_md5 = Digest::MD5.file(tmp_file).hexdigest
      apk_path = File.join Settings.apks_dir, "#{package_name}.#{apk_md5}.apk"

      FileUtils.mkdir_p Settings.apks_dir
      FileUtils.mv tmp_file, apk_path

      package_info = dump_package_info apk_path
      update_attributes package_info.merge(md5: apk_md5)
      apk_path
    rescue OpenURI::HTTPError, OpenURI::HTTPRedirect
      false
    end

     

    http://www.ruby-doc.org/stdlib-1.9.3/libdoc/tempfile/rdoc/Tempfile.html

    Tempfile

    默认存储路径是 /tmp
    A utility class for managing temporary files. When you create a Tempfile object, it will create a temporary file with a unique filename. A Tempfile objects behaves just like a File object, and you can perform all the usual file operations on it: reading data, writing data, changing its permissions, etc. So although this class does not explicitly document all instance methods supported by File, you can in fact call any File instance method on a Tempfile object.


    require 'tempfile'
    
    file = Tempfile.new('foo')
    file.path      # => A unique filename in the OS's temp directory,
                   #    e.g.: "/tmp/foo.24722.0"
                   #    This filename contains 'foo' in its basename.
    file.write("hello world")
    file.rewind
    file.read      # => "hello world"
    file.close
    file.unlink    # deletes the temp file





  • 相关阅读:
    014
    013
    012
    011
    009
    009
    008
    适用于可迭代对象的通用函数
    ubuntu中将py3设置为默认的python
    linux系统下安装gtk
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/3795259.html
Copyright © 2011-2022 走看看