¿Cómo puedo imprimir varias cosas en la misma línea, una a la vez?

Resuelto user697108 asked hace 13 años • 0 respuestas

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 printpara 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? .

user697108 avatar Apr 08 '11 23:04 user697108
Aceptado

Solución Python 3

La print()función acepta un endpará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]"
multipleinterfaces avatar Apr 08 '2011 16:04 multipleinterfaces

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);

magnump0 avatar Mar 14 '2013 13:03 magnump0

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?

Vadim Zin4uk avatar Mar 31 '2014 08:03 Vadim Zin4uk

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.

ferostar avatar Apr 08 '2011 16:04 ferostar