tag name php command-line stdout autoflush

php - get tag name wordpress



Actualizar la salida de lĂ­nea de comandos, es decir, para el progreso (3)

Esto puede hacerse usando las Secuencias de escape de ANSI - vea aquí para obtener una lista.

En PHP, usará "/033" cuando se indique ESC en esa página.


En tu caso, podrías usar algo como esto:

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 }


Me simplifiqué un poco, asegurándome de tener siempre 5 caracteres adicionales, y siempre mostrando la misma cantidad de datos, para siempre retroceder con el mismo número de caracteres ...

Pero, por supuesto, deberías poder hacer mucho más complicado, si es necesario ;-)

Y hay muchas otras secuencias de escape interesantes: los colores, por ejemplo, pueden mejorar bastante tu producción ;-)

Me gustaría poder mostrar un medidor de progreso en un simple script PHP en la línea de comando. En lugar de ver

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

Me gustaría simplemente cambiar el número y reemplazar el número anterior, al igual que hace git clone, por ejemplo Resolving deltas: 100% (8522/8522), done. .

Mientras buscaba esto encontré la misma pregunta respondida en Perl , que es perfecta, pero no pude encontrarla en PHP. ¿Es posible? Si no, recurriré a C.

Gracias

Actualización: si alguien está interesado en la versión de C ++, está aquí .


Solo para el registro de un hilo antiguo: en lugar de utilizar la elegante secuencia de escape ANSI para mover el cursor hacia atrás, simplemente lo muevo al principio de la línea usando "/ r" en lugar de al principio de la siguiente línea "/ n" . Agregue algunos espacios después de su eco para sobrescribir todo lo que estaba allí anteriormente, como por ejemplo, así:

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


También puedes hacer algo como esto:

<?php function showTextBasedProgress() { static $progress = ''-''; echo chr(8) . $progress; // chr(8) = /b switch ($progress) { case ''-'': { $progress = ''//'; break; } case ''//': { $progress = ''|''; break; } case ''|'': { $progress = ''/''; break; } case ''/'': { $progress = ''-''; break; } } }

Ejemplo de uso:

while(1) { showTextBasedProgress(); sleep(1); }