今天使用wget下载ruby源码,因为网速实在缓慢只好等待,等待过程中看着wget的进度条就开始想是怎么实现的了。如图:
此类功能在Linux的控制台软件中是很常见的,Windows下没有什么印象。
因为wget是C语言在Linux上实现的,我首先考虑到的是不是有相关接口,于是就找来那本名著《UINX环境编程》,查阅后并未发现相关API。有同事认为STDOUT也是文件,应该看看文件IO章。于是就仔细学习了那章,复习和巩固了一下知识,虽然看似可以解决这个问题,但感觉操作过于繁琐。
因为进度条的输出在STDOUT,所以我认为是应该理解一下STDOUT的处理机制。在学习STDOUT相关资料时,我发现了 “\r” 这个转义符,代表“回车”。顺藤摸瓜,开始区分一下“回车”和”换行”。以下自回车与换行
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。 这就是"换行"和"回车"的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有"<换行>",即"\n";Windows系统里面,每行结尾是"<回车><换行>",即"\r\n";Mac系统里,每行结尾是"<回车>"。
然后了解到\r会将光标移动到行首,那么只要不进行换行就可以实现在该行刷新输出,进而实现进度条效果了。回忆一下C后,终于可以实现:
#include <stdio.h>
int main(){
int i;
char x[300];
memset(x,0,300);
for(i=0;i<100;i++){
sprintf(&x[0],"%2d",i);
x[2]='%';
x[3+i]='=';
printf("\r%s>",x);
fflush(stdout);
sleep(1);
}
printf("\n");
}
当然,既然原理探究清楚了,那么Ruby实现亦然:
(1..100).each do |x|
printf "\r%s",x.to_s+'%'+'='*x+'>'
sleep 1
end
puts
相关推荐
主要介绍了Python实现控制台进度条功能,Python中如何写控制台进度条,本文为大家揭晓,感兴趣的小伙伴们可以参考一下
---------------------------------------------------------------------------------------------------------------------------------------C#源码
python控制台实现进度条
提醒:传代码的时候,发现FTP操作类的New里面少了对控制台进度条类的初始化,但我重新编辑上传信息时,无法再次上传覆盖,再次特别提醒,如有下载用到,注意在New里面添加。 本人刚好要用到FTP操作相关,但是查遍...
主要用来描述在控制台应用程序中,如何来实现进度条的功能
主要介绍了java控制台输出百分比进度条示例,需要的朋友可以参考下
主要介绍了Python实现进度条的4种方式,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
本文实例讲述了Python显示...最简单的办法就是,再输出完毕后,把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。 可以想到那个转义符了吧,那就是\ r。 转义
下面小编就为大家分享一篇Python实现控制台中的进度条功能代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
今天就和大家探讨这个问题:如何在python控制台中实现进度条功 进度条最主要的问题就是所有字符全部在同一行,而且可以修改。 然而当执行print语句的时候,python会在打印完这个语句的同时在结尾加上’\n’,也就是...
本文实例讲述了python在控制台输出进度条的方法。分享给大家供大家参考。具体实现方法如下: 进度条效果如下所示: |#############################---------------------| 59 percent done 代码如下: class ...
等待复制文件显示一个进度条,主要是用vc基于MFC实现的,提供完整的源代码可以直接运行。
进度条的简单实现,需要在cmd中才能展示效果,控制台看不到效果,具体的业务逻辑可根据需求修改
在项目开发过程中加载、启动、下载项目难免会用到进度条,如何使用Python实现进度条呢? 这里为小伙伴们分享四种Python实现进度条的库:Progress库、tqdm库、alive-progress库和PySimpleGUI库,其中前三个是文本...
该项目主要实现的是在VC6.0开发平台下,用滑块和控制台来实现的对系统声音的控制。
先贴出单行刷新实现的进度条: 对于控制台的单行刷新,比较简单,先直接贴出代码: strarrs = ['/','|','\\'] for i in range(15): sys.stdout.write(strarrs[i % 3]+'{}/15:'.format(i+1)+'#' * i+'\r') sys....
已实现的目标: 地图支持自定义编辑(可编辑地图中的:空地、墙、豆子、超级豆子、小怪初始位置及数量、吃豆人初始位置) 可选择游戏难度(即设定不同的小怪移动速度) 怪兽可追踪吃豆人位置,往吃豆人的所在位置...