Обновление вывода командной строки, то есть для прогресса
Мне бы хотелось показать индикатор производительности в простой PHP script в командной строке. Вместо того, чтобы видеть
Progress: 0%
Progress: 1%
etc...
Я хотел бы просто изменить номер и заменить предыдущий номер, как например, git clone, например Resolving deltas: 100% (8522/8522), done.
.
При поиске этого я нашел тот же вопрос, на который ответил Perl, который является идеальным, но я не смог найти его в PHP. Является ли это возможным? Если нет, я прибегу к C.
Спасибо
Обновление: Если кто-то заинтересован в версии С++, здесь.
Ответы
Ответ 1
Это можно сделать, используя 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
}
Я немного упростил, убедившись, что у меня всегда есть 5 дополнительных символов и всегда отображает один и тот же объем данных, чтобы всегда двигаться назад на то же количество символов...
Но, конечно, вы должны быть в состоянии сделать намного сложнее, если необходимо; -)
И есть много других интересных escape-последовательностей: цвета, например, могут немного улучшить ваш выход; -)
Ответ 2
Просто для записи, хотя старый поток:
Вместо того, чтобы использовать фантастическую последовательность ANSI Escape для перемещения назад курсора, я просто верну его обратно в начало строки, используя "\ r", а не в начало следующей строки "\n". Добавьте несколько пробелов после эха, чтобы перезаписать все, что было ранее, например, например. так:
for ($i=0 ; $i<=100 ; $i++) {
echo "Progress: $i % \r";
sleep(1);
}