更新命令行输出,即进度

2022-08-30 08:57:02

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

Progress: 0%
Progress: 1%
etc...

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

在搜索这个时,我发现了Perl中回答的相同问题,这是完美的,但我在PHP中找不到它。可能吗?如果没有,我会求助于C。

谢谢

更新:如果有人对C++版本感兴趣,请点击此处


答案 1

这可以使用ANSI转义序列来完成 - 请参阅此处以获取列表。

在 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
}


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

但是,当然,如果需要,您应该能够做更复杂的事情;-)

还有许多其他有趣的转义序列:例如,颜色可以大大增强您的输出;-)


答案 2

只是为了通过一个旧线程的记录:而不是使用花哨的ANSI Escape序列来移动光标,我只是使用“\r”将其移回行的开头,而不是下一行“\n”的开头。在回声后添加一些空格以覆盖以前存在的任何内容,例如:

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

推荐