...
PHP

PHP 在 Console 控制台模式下的进度显示 标准输出 打印

关于 \r\n 的由来

说到换行,大家都知道在在写程序时,提示语的结尾换行,在 Win 下 \r\n 在 Mac 和 Linux 下 \n 表示,说到这里就要引用下阮一峰大神的一篇关于换行的文章: 回车和换行。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

凑巧,前两天在知乎也看到了一个关于:为什么会用\r\n两个字符表示换行 

[Line Feed]的作用是让打字机的卷轴向前卷一行,而[Return]的作用则是将打印头复位到行首,所以又叫[Cartridge Return(CR)]。


Console 下的进度

因为 \r (CR,回车) 表示将光标移到行首,\n (LF,换行) 表示将光标下移一行;所以,我们只将光标移到行首(CR,\r),不下移一行,就可以将原来此行内容重写。

那么,我们就可以在批量脚本的,单个循环的结束后更新整个脚本的进度,下面以一个文件块的下载为例:


29172337_uFwj.png


29172552_fItq.png
这样,你就可以在自己的脚本中,很方便的实现进度展示了。

其他语言也是类同的,你只需要在提示语的行位添加 \r 即可重写本行提示语
有区别的是在不同的系统下,进度条的单位宽度不同,当出现换行,你可以拉宽下你的控制台(TTY)试试。

php代码如下:

$p = 100; //100%进度

printf("%d%%\r",$p);

//输出
100%


Navicat Premium 15破解 windows echo.js图片懒加载
biu biu biu
js公共函数合集 小程序 util.js rem与px的转换 一款好用的VPIV Linux添加用户及用户权限管理 常用sql server sql语句