我正在尝试使用urllib2 http客户端在python中创建下载进度栏。我已经查看了API(以及Google),似乎urllib2不允许您注册进度挂钩。但是,较旧的不推荐使用的urllib确实具有此功能。
有谁知道如何使用urllib2创建进度条或报告挂钩?还是有一些其他的黑客来获得类似的功能?
这是一个完全有效的示例,它建立在Anurag响应中的分块方法的基础上。我的版本允许您设置块大小,并附加任意报告功能:
import urllib2, sys def chunk_report(bytes_so_far, chunk_size, total_size): percent = float(bytes_so_far) / total_size percent = round(percent*100, 2) sys.stdout.write("Downloaded %d of %d bytes (%0.2f%%)\r" % (bytes_so_far, total_size, percent)) if bytes_so_far >= total_size: sys.stdout.write('\n') def chunk_read(response, chunk_size=8192, report_hook=None): total_size = response.info().getheader('Content-Length').strip() total_size = int(total_size) bytes_so_far = 0 while 1: chunk = response.read(chunk_size) bytes_so_far += len(chunk) if not chunk: break if report_hook: report_hook(bytes_so_far, chunk_size, total_size) return bytes_so_far if __name__ == '__main__': response = urllib2.urlopen('http://www.ebay.com'); chunk_read(response, report_hook=chunk_report)