2

诸如此类的实用程序wget可以将其下载百分比写入控制台并不断更新它而无需编写新行。这个功能叫什么,Symfony 的控制台组件可以实现吗?

4

2 回答 2

3

我使用 1ed 的答案来查看 Symfony 如何使用 2.2 中提供的进度助手来完成它。十六进制字符代码“\x08”(ANSI 退格字符)将删除单个字符。如果跟踪最后一行的长度,并使用 str_repeat,就可以达到预期的效果。

概念证明:

<?php
$lastLineSize = 0;

for ($i = 0; $i <= 50; $i++) {
    echo str_repeat("\x08", $lastLineSize);
    echo "Iteration {$i} of 50";
    $lastLineSize = strlen("Iteration {$i} of 50");
    usleep(100000);
}

echo " - Done\n";

输出:

[root@dev /home/myuser] > php test.php
Iteration 50 of 50 - Done
[root@dev /home/myuser] >
于 2012-11-18T23:33:35.423 回答
2

如果您在 master 分支上,则可以使用进度助手docs)。

于 2012-11-15T23:34:25.203 回答