我发现这个很酷的进度条我使用: https://stackoverflow.com/a/27147177/1480397
但我不知道它在做什么,而且我没有谷歌。
"\r\033[0G\033[2K[%'={$percentageDone}s>%-{$percetageLeft}s] - $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",
这就是我正在使用的。
我认为序列是:
\r
- 回车,回去开始\033[0G
- Esc[0g
清除当前列的标签* * / / li>
\033[2K
- Esc[2K
清除整行* [%'={$percentageDone}s>%-{$percetageLeft}s]
*
当我删除代码时,这并没有达到我的预期,来源:http://ascii-table.com/ansi-escape-sequences-vt-100.php
那么,这些序列是否正确提取?解释是否正确?为什么最后写作酷吧?
[====> <much more spaces> ]
要测试的代码:
for ($i = 0; $i <= 100; $i++) {
$absoluteDone = $i;
$absoluteTotal = 100;
$percentageDone = floor(($absoluteDone / $absoluteTotal) * 100);
$percetageLeft = 100 - $percentageDone;
$avgTime = 10;
$setCursorToLineStart = "\033[0G";
$clearLine = "\033[2K";
$progressbarAndStatusInfo = sprintf(
$setCursorToLineStart
. $clearLine
. "[%'={$percentageDone}s>%-{$percetageLeft}s] - $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",
"",
"",
$avgTime,
gmdate("H:i:s", $avgTime * ($absoluteTotal - $absoluteDone))
);
echo $progressbarAndStatusInfo;
sleep(1);
}
答案 0 :(得分:1)
然后,ansi转义码对我来说是正确的:
[%'={$percentageDone}s>%-{$percetageLeft}s]
与ansi无关。它通过sprintf填充:
'={$percentageDone}
将填充x&#39; =&#39; chars,其中x是$ percentageDone中的值。
有关详细信息,请参阅sprintf文档。