在python中下载文件并取消

我试图在
python中创建一个简单的函数来下载文件

代码是这样的

def download(url , dest):
    urllib.urlretrieve(url, dest)

我的问题是,如果我想在下载过程中取消下载过程,我该如何处理???

此功能在app的后台运行,由按钮触发.现在我试图用另一个按钮触发它.

该平台是XBMC.

最佳答案 一个与下载功能相同的简单类:

import urllib
import threading

class Downloader:

    def __init__(self):
        self.stop_down = False
        self.thread = None

    def download(self, url, destination):
        self.thread = threading.Thread(target=self.__down, args=(url, destination))
        self.thread.start()

    def __down(self, url, dest):
        _continue = True
        handler = urllib.urlopen(url)
        self.fp = open(dest, "w")
        while not self.stop_down and _continue:
            data = handler.read(4096)
            self.fp.write(data)
            _continue = data
        handler.close()
        self.fp.close()

    def cancel(self):
        self.stop_down = True

因此,当有人单击“取消”按钮时,您必须调用cancel()方法.

请注意,如果取消它,这将不会删除部分下载的文件,但是使用os.unlink()并不难实现.

以下示例脚本显示了如何使用它,开始下载~20Mb文件并在5秒后取消它:

import time
if __name__ == "__main__":
    url = "http://ftp.postgresql.org/pub/source/v9.2.3/postgresql-9.2.3.tar.gz"
    down = Downloader()
    down.download(url, "file")
    print "Download started..."
    time.sleep(5)
    down.cancel()
    print "Download canceled"
点赞