更新命令行输出,即进度

Ada*_*dam 60 php command-line stdout autoflush

我希望能够在命令行上用简单的PHP脚本显示进度表.而不是看到

Progress: 0%
Progress: 1%
etc...
Run Code Online (Sandbox Code Playgroud)

我只想更改数字,并替换以前的数字,就像git clone那样Resolving deltas: 100% (8522/8522), done..

在搜索这个时,我发现在Perl中回答同样的问题,这是完美的,但我在PHP中找不到它.可能吗?如果没有,我会诉诸C.

谢谢

更新:如果有人对C++版本感兴趣,它就在这里.

Pas*_*TIN 104

这可以使用ANSI Escape Sequences完成 - 请参阅此处获取列表.

在PHP中,您将在该页面上"\033"显示它时使用ESC.


在你的情况下,你可以使用这样的东西:

echo "Progress :      ";  // 5 characters of padding at the end
for ($i=0 ; $i<=100 ; $i++) {
    echo "\033[5D";      // Move 5 characters backward
    echo str_pad($i, 3, ' ', STR_PAD_LEFT) . " %";    // Output is always 5 characters long
    sleep(1);           // wait for a while, so we see the animation
}
Run Code Online (Sandbox Code Playgroud)


我简化了一点,确保我总是有5个额外的字符,并且始终显示相同数量的数据,以便始终向后移动相同数量的字符...

但是,当然,如果需要,你应该能够做得更复杂;-)

还有许多其他有趣的转义序列:例如,颜色可以提升你的输出相当多;-)

  • PHP> 5.4.0现在有"\ e"来编写ESC (5认同)

Dom*_*Dom 57

只是为了记录旧线程:不是使用花哨的ANSI Escape排序来移动光标,而是使用"\ r"而不是下一行"\n"的开头将其移回到行的开头. .在echo之后添加一些空格来覆盖之前的任何空格,例如:

for ($i=0 ; $i<=100 ; $i++) {
  echo "Progress: $i %   \r";
  sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

  • 非常有效,在 Windows 上也能使用!(已测试) (2认同)