分享

python 进度条

 浸心阁 2015-04-02

最近在写批量上传文件的脚本,用的库是paramiko,以后将写下paramiko的使用心得, 这次记录下python有关进度条的东西,

众所周知上传,下载,如果有一个进度显示的话, 对使用者也不是枯燥的等待, 起码.. 起码知道脚本在正常工作, 也知道下载/上传 的进度了.

正好这次脚本也有上传的部分.就将这次的心得记录下

首先,所谓的进度条和print没啥不不同,都是将结果输出而已, 但是如果用print就注定 悲剧, 因为print的时候会带一个\n,可以想象如果我们的进度条还换行, 那还算条子嘛.. 恶汗..

一个最简单的进度条 实现原理就是 再输出完毕后,把光标移动到行首,继续在那里输 出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果

我们可以利用\r, 转义符\r就可以把光标移动到行首而不换行,转义符\n就把光 标移动到行首并且换行。 这里用一个例子来说明,这是我脚本中的一个函数, 用于接收paramiko.sftp_client.sftp 中的put方法的callback数据,by the way, 利用paramiko的sftp的put方法,可以将本地文件上传至服务器,默认参数中有一个callback=None, 别人可以利用callback来接收文件上传的进度, 每隔32768字节返回一次进度,我们可以构造一个callback来接收,

def _callback(self,a,b):
    sys.stdout.write('Data Transmission %10d [%3.2f%%]\r' %(a,a*100./int(b)))
    sys.stdout.flush()

这样在使用put方法的时候 就可以put(本地文件,远程路径,_callback)

在默认情况下put方法是不需要后面的callback参数的, 只需要本地路径和远程路径, 因为我们需要知道上传进度. 因此加一个callback上去,在callback函数定一个 进度

sys.stdout.write('Data Transmission %10d [%3.2f%%]\r' %(a,a*100./int(b)))

这样当使用put方法的时候. 就可以得到一个文件上传的进度的百分比. 类似这样

Data Transmission 234524 [55%]

同时234524 [55%] 不断变化 直至100%

python丰富的模块,提供了无限可能,这里还有一个好东西叫做progressbar

直接上效果图,ps:我自己没这种需求,就用了最简单的实现模式,这个是我找相关进度条资料的时候顺带找到的

原文地址:python 进度条, 感谢原作者分享。
更多 0
支持

0 顶

反对

0 踩

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多