¿Cómo puedo imprimir varias cosas en la misma línea, una a la vez?
Quiero ejecutar un script que básicamente muestra un resultado como este:
Installing XXX... [DONE]
Actualmente, imprimo Installing XXX...
primero y luego imprimo [DONE]
.
¿Cómo puedo imprimir Installing xxx...
y [DONE]
en la misma línea?
Para el problema específico de escribir un nuevo mensaje en la misma línea, reemplazando lo que había antes , consulte ¿Cómo sobrescribir la impresión anterior en la salida estándar? . La mayoría de las respuestas aquí interpretaron que la pregunta trataba sobre escribir texto nuevo al final de la línea actual.
Para el problema de usar uno solo print
para generar varias cosas a la vez, consulte ¿Cómo puedo imprimir varias cosas (texto fijo y/o valores variables) en la misma línea, todas a la vez? .
Solución Python 3
La print()
función acepta un end
parámetro cuyo valor predeterminado es \n
(nueva línea). Establecerlo en una cadena vacía evita que emita una nueva línea al final de la línea.
def install_xxx():
print("Installing XXX... ", end="", flush=True)
install_xxx()
print("[DONE]")
Solución Python 2
Poner una coma al final de la print()
línea evita print()
que se emita una nueva línea (debe tener en cuenta que habrá un espacio adicional al final de la salida).
def install_xxx():
print "Installing XXX... ",
install_xxx()
print "[DONE]"
Simplemente puedes usar esto:
print 'something',
...
print ' else',
y la salida será
something else
no hay necesidad de exagerar import sys
. Preste atención al símbolo de coma al final.
Python 3+
print("some string", end="");
para eliminar la inserción de nueva línea al final. Leer más porhelp(print);
Debe utilizar el carácter de retroceso ' \r ' o (' \x08 ') para volver a la posición anterior en la salida de la consola.
Pitón 2+:
import time
import sys
def backspace(n):
sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
sys.stdout.write(s) # just print
sys.stdout.flush() # needed for flush when using \x08
backspace(len(s)) # back n chars
time.sleep(0.2) # sleep for 200ms
Pitón 3:
import time
def backline():
print('\r', end='') # use '\r' to go back
for i in range(101): # for 0 to 100
s = str(i) + '%' # string for output
print(s, end='') # just print and flush
backline() # back to the beginning of line
time.sleep(0.2) # sleep for 200ms
Este código contará del 0% al 100% en una línea. El valor final será:
> python test.py
100%
Información adicional sobre el lavado en este caso aquí: ¿Por qué las declaraciones impresas de Python que contienen argumentos 'end=' se comportan de manera diferente en los bucles while?
Uso sys.stdout.write('Installing XXX... ')
y sys.stdout.write('Done')
. De esta manera, debe agregar la nueva línea a mano "\n"
si desea recrear la funcionalidad de impresión. Creo que podría ser innecesario usar maldiciones sólo para esto.