← Volver

Cómo imprimir en una línea anterior en la consola

Usando los argumentos end y flush de la función incorporada print():

import time

print("Hola mundo...", end="", flush=True)
time.sleep(2)
# Este mensajé aparecerá dos segundos despues
# reemplazando "Hola mundo...".
print("\r...desde Python")

Este código imprime en pantalla Hola mundo... y luego de dos segundos lo reemplaza por ...desde Python. El truco para lograr este resultado es el argumento end="" de la primera llamada, que evita que print() agregue un salto de línea luego del primer mensaje. En la segunda llamada a print(), colocamos al principio de la cadena el carácter de retorno de carro (\r), que devuelve la posición donde estamos escribiendo (que luego de la primera impresión quedó en la posición 13, pues es la longitud del mensaje Hola mundo...) al lugar cero (esto es, el extremo izquierdo de la consola). El parámetro flush=True de la primera llamada se agura de que el mensaje sea enviado al instante a la consola.

Téngase en cuenta que si el segundo mensaje es de menor longitud que el primero, se podrán observar todavía en consola caracteres remanentes del primer mensaje. Por ejemplo:

print("Hola mundo...", end="", flush=True)
time.sleep(2)
# Después de dos segundos se verá en pantalla
# Chau mundo...
print("\rChau")

Aquí el segundo print() solo reemplaza los primeros cuatro (longitud de Chau) caracteres del mensaje anterior. Si se quiere borrar el primer mensaje completo, se pueden agregar algunos espacios en blanco:

import time

print("Hola mundo...", end="", flush=True)
time.sleep(2)
# Imprime "Chau" más veinte espacios en blanco,
# para reemplazar todo el mensaje anterior.
print("\rChau" + " " * 20)

consola


👨‍💻 ¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

🐍 También te puede interesar:


💡 Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.