今天捣鼓了以下Python的urllib模块,闲着无事,下个命令行下的下载器程序。

  通过调用模块的urlretrieve方法获取远程文件,并且用自定义函数来处理下载过程中的显示问题。

  

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#filename: download.py
import urllib
import sys

def download(url, filename):
    def reporthook(block_count, block_size, file_size):
        # 无法获得远程文件大小
        if file_size == -1:
            print "已下载", block_count*block_size, 'Byte'
        # 实时显示现在进度
        else:
            percentage = int((block_count*block_size*100) / file_size)
            if percentage > 100:
                print '100%'
            else:
                print '下载进度%d%%' % (percentage)

    filehandler, m = \
                urllib.urlretrieve(url, filename, reporthook=reporthook)
    print '下载完成'

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print '使用方法: %s url filename' % sys.argv[0]
    else:
        download(sys.argv[1], sys.argv[2])

  因为有些时候,无法得到下载文件的大小,此时显示已经下载的内容部分的大小!

  使用的时候需要提供远程文件路径,本地保存文件名。其实很没有实际意义!只是写着好玩而已!

  我来下载首歌曲试一下,终端下输入
  python download.py http://www.qingtengshop.cn/bag/gequ.mp3 ‘Free Loop.mp3′

  下载进度1%
  下载进度2%
  省略““
  下载进度98%
  下载进度99%
  下载进度100%
  下载完成

  呵呵,无趣吧!




Related posts

, ,
Address: http://blog.okkey.net/1066.html,转载请注明出处。
Trackback

16 comments untill now

  1. 不管懂不懂,抢沙发先!

    [回复]

    Kada 回复:

    喵喵最好了!

    [回复]

  2. 那我只能抢板凳了

    [回复]

    Kada 回复:

    多来坐坐。

    [回复]

    喵喵呜 回复:

    哈哈,阿正,你今天板凳坐真多!

    [回复]

  3. 偶把自己塞进KADA的大脑,然后就能看懂这些是啥东东了~

    [回复]

    Kada 回复:

    阿。。。好险。。。

    [回复]

  4. 呵呵,脚本总运行时间没有限制吧?
    那真是比PHP好了很多,小邪最近在上下传与进度显示方面 ~
    有点儿苦恼 ~

    [回复]

    Kada 回复:

    可以选择设置超时时间的。

    [回复]

  5. 有些好的工具很重要

    [回复]

  6. 看看loker

    [回复]

    漠岚 回复:

    声明 看错了….原来是柯达

    [回复]

    Kada 回复:

    你小心菊花不保!

    [回复]

  7. 我喜欢的可爱的python啊,哈哈

    [回复]

    Kada 回复:

    是很可爱。呵呵。

    [回复]

  8. 来学习一下!

    [回复]

Add your comment now