Siempre me he preguntado cómo la gente actualiza una línea anterior en una línea de comando. un gran ejemplo de esto es cuando se usa el comando wget en linux. Crea una especie de barra de carga ASCII que se ve así:
[======>] 37%
y, por supuesto, la barra de carga se mueve y el porcentaje cambia, pero no hace una nueva línea. No puedo encontrar la manera de hacer esto. ¿Alguien me puede apuntar en la dirección correcta?
command-line
El.Anti.9
fuente
fuente
Una forma de hacerlo es actualizar repetidamente la línea de texto con el progreso actual. Por ejemplo:
Tenga en cuenta que utilicé en
sys.stdout.write
lugar deprint
(esto es Python) porqueprint
imprime automáticamente "\ r \ n" (nueva línea de retorno de carro) al final de cada línea. Solo quiero el retorno de carro que devuelve el cursor al inicio de la línea. Además,flush()
es necesario porque, de forma predeterminada,sys.stdout
solo vacía su salida después de una nueva línea (o después de que su búfer se llena).fuente
El secreto es imprimir solo \ r en lugar de \ n o \ r \ n en la línea y.
\ r se llama retorno de carro y mueve el cursor al comienzo de la línea
\ n se llama salto de línea y mueve el cursor a la siguiente línea en la consola. Si solo usa \ r, sobrescribe la línea escrita anteriormente. Así que primero escribe una línea como la siguiente:
luego agregue un signo para cada tick
y así. Puede utilizar 10 caracteres, cada uno de los cuales representa un 10%. Además, si desea mostrar un mensaje cuando haya terminado, no olvide agregar también suficientes caracteres en blanco para que sobrescriba los signos iguales escritos anteriormente de esta manera:
fuente
a continuación está mi respuesta, use las consolas API de Windows (Windows) , codificación de C.
fuente
bInfo
define?PowerShell tiene un cmdlet Write-Progress que crea una barra de progreso en la consola que puede actualizar y modificar a medida que se ejecuta su script.
fuente
Aquí está la respuesta a su pregunta ... (python)
fuente
Como continuación de la respuesta de Greg , aquí hay una versión extendida de su función que le permite mostrar mensajes de varias líneas; simplemente pase una lista o tupla de las cadenas que desea mostrar / actualizar.
Nota: Solo he probado esto usando una terminal Linux, por lo que su kilometraje puede variar en los sistemas basados en Windows.
fuente
\n
a\r\n
en su secuencia de comandos, pero todavía no puedo hacerlo funcionar en Windows (¿verdad?) Recibo←[A←[A
algunos mensajes, sospecho que la'\x1b[A'
secuencia no hace lo que deberíacmd.exe
.Si está usando un lenguaje de scripting, podría usar el comando "tput cup" para hacer esto ... PD: Esto es algo de Linux / Unix solo que yo sepa ...
fuente