Python 如何获取urllib2的上载进度条?

Python 如何获取urllib2的上载进度条?,python,Python,我目前使用以下代码将一个文件上载到远程服务器: import MultipartPostHandler, urllib2, sys cookies = cookielib.CookieJar() opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) params = {"data" : open("foo.bar") } request=opener.open("http://127.0.0.1/api.

我目前使用以下代码将一个文件上载到远程服务器:

import MultipartPostHandler, urllib2, sys
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
params = {"data" : open("foo.bar") }
request=opener.open("http://127.0.0.1/api.php", params)
response = request.read()
这很好,但对于较大的文件,上载需要一些时间,如果有一个回调允许我显示上载进度,那会更好吗

我已经尝试过kodakloader解决方案,但它没有针对单个文件的回调


有人知道解决方案吗?

这里有一个来自我们python依赖脚本的片段,我和他一起编写了@(尽管他完成了其中的这一部分)。完整的脚本是


我认为不可能知道urllib2的上传进度。我正在研究使用pycurl。

这显示了下载的进度,对吗?该问题要求上传进度条…看起来这解决了我的问题:
    try:
        tmpfilehandle, tmpfilename = tempfile.mkstemp()
        with os.fdopen(tmpfilehandle, 'w+b') as tmpfile:
            print '  Downloading from %s' % self.alternateUrl

            self.progressLine = ''
            def showProgress(bytesSoFar, totalBytes):
                if self.progressLine:
                    sys.stdout.write('\b' * len(self.progressLine))

                self.progressLine = '    %s/%s (%0.2f%%)' % (bytesSoFar, totalBytes, float(bytesSoFar) / totalBytes * 100)
                sys.stdout.write(self.progressLine)

            urlfile = urllib2.urlopen(self.alternateUrl)
            totalBytes = int(urlfile.info().getheader('Content-Length').strip())
            bytesSoFar = 0

            showProgress(bytesSoFar, totalBytes)

            while True:
                readBytes = urlfile.read(1024 * 100)
                bytesSoFar += len(readBytes)

                if not readBytes:
                    break

                tmpfile.write(readBytes)
                showProgress(bytesSoFar, totalBytes)

    except HTTPError, e:
        sys.stderr.write('Unable to fetch URL: %s\n' % self.alternateUrl)
        raise