usuario697108
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 en su lugar Installing xxx...
y [DONE]
en la misma linea?
Para el problema específico de escribir un nuevo mensaje en la misma línea, reemplazando lo que había antesconsulte ¿Cómo sobrescribir la impresión anterior en la salida estándar?. Mayoría Las respuestas aquí interpretaron la pregunta como si se tratara de escribir un nuevo texto. al final de la línea actual.
Para el problema de usar un 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?.
múltiples interfaces
Solución Python 3
Él print()
La función acepta una end
parámetro que por defecto 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
Poniendo una coma al final del print()
línea previene print()
de emitir 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]"
-
Funciona perfectamente. Solo había visto soluciones estándar hasta ahora. Realmente bueno saber eso.
– Prometeo
8 de enero de 2015 a las 7:59
-
Esto no funciona si tiene ambas impresiones y una acción que consume mucho tiempo en el medio (todo en la misma función/nivel de sangría). Antes de que comience la acción, no hay ningún resultado y, una vez finalizada, el resultado aparece completo.
– Padre
20 de febrero de 2015 a las 15:08
-
Probablemente sea más una función del almacenamiento en búfer de salida realizado por el sistema operativo para el proceso en su conjunto, que no es un problema específico de Python. Consulte stackoverflow.com/questions/107705 para obtener una solución alternativa específica de Python.
– múltiples interfaces
20 de febrero de 2015 a las 16:48
-
Sin una nueva línea, probablemente desee vaciar explícitamente el búfer. Utilizar
print("...", end="", flush=True)
en Python 3, en Python 2 agregue unsys.stdout.flush()
llamada.– Martijn Pieters
♦3 de noviembre de 2016 a las 12:53
-
en python 3.x, querrá agregar un “\ r” al final para reemplazar la línea impresa VS que se agrega al final de la misma
print("Progress: {}%".format(var), end="\r", flush=True)
– John
06/01/2018 a las 22:42
audaz
Simplemente puede usar esto:
print 'something',
...
print ' else',
y la salida será
something else
no hay necesidad de exagerar por import sys
. Preste atención al símbolo de coma al final.
Pitón 3+
print("some string", end="");
para eliminar la inserción de nueva línea al final. Leer más por help(print);
-
Tenga en cuenta que hay dos espacios al usar este método
– ethanjyx
12 de noviembre de 2013 a las 3:20
-
Esta es la respuesta más simple y eficiente.
– gixxer
22 de mayo de 2015 a las 4:45
-
Esto no funciona cuando los argumentos de impresión están entre paréntesis. Esto funciona:
pero esto no funciona –Mayank Jaiswal
27 de noviembre de 2015 a las 7:46
-
@MayankJaiswal Esto funciona con los padres. imprimir(‘hola’),
– drglove
06/02/2016 a las 22:39
-
print
La función tiene una sintaxis ligeramente diferente en Python 2 VS 3.– boldnik
7 de febrero de 2016 a las 4:24
vadim zin4uk
Deberías usar retroceso ‘\r‘ o (‘\x08‘) char 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 vaciado en este caso aquí: ¿Por qué las declaraciones de impresión de Python que contienen argumentos ‘end=’ se comportan de manera diferente en los bucles while?
-
Para aclarar, parece que el código comentado en este ejemplo es para Python 2 y las líneas sin comentarios son para Python 3.
– Las tortugas son lindas
09/03/2015 a las 23:05
-
Ambas líneas funcionarán bien en Python 3. Si usa ‘\x08′ como retroceso, debe vaciar el flujo de salida: print((b’\x08’ * n).decode(), end=”, flush= Verdadero)
– Vadim Zin4uk
10 de marzo de 2015 a las 9:43
-
El retorno de carro ‘\r’ vuelve al principio de la línea, por lo que el ‘* n’ es innecesario
– bjnortier
8 de mayo de 2017 a las 8:02
ferostar
Utilizar sys.stdout.write('Installing XXX... ')
y sys.stdout.write('Done')
. De esta manera, debe agregar la nueva línea a mano con "\n"
si desea recrear la funcionalidad de impresión. Creo que podría ser innecesario usar maldiciones solo para esto.
Sunfloro
Más sencillo:
Pitón 3
print('\r' + 'something to be override', end='')
Significa que hará retroceder el cursor al principio, que imprimirá algo y terminará en la misma línea. Si está en un bucle, comenzará a imprimir en el mismo lugar donde comienza.
-
¡Fresco! Funciona en Windows también.
– Shital Shah
13 de febrero de 2019 a las 11:59
-
Gracias esto funciona bien para mí! pienso que
print(’something to be override’, end=‘\r’)
aunque es más simple.– Tropilio
10 de abril de 2019 a las 9:00
hipnótico
Ninguna de las respuestas funcionó para mí, ya que todas se detuvieron hasta que se encontró una nueva línea. Escribí un ayudante simple:
def print_no_newline(string):
import sys
sys.stdout.write(string)
sys.stdout.flush()
Para probarlo:
import time
print_no_newline('hello ')
# Simulate a long task
time.sleep(2)
print('world')
“hola” primero se imprimirá y aparecerá en la pantalla antes de dormir. Después de eso, puede usar la impresión estándar.
-
¡Fresco! Funciona en Windows también.
– Shital Shah
13 de febrero de 2019 a las 11:59
-
Gracias esto funciona bien para mí! pienso que
print(’something to be override’, end=‘\r’)
aunque es más simple.– Tropilio
10 de abril de 2019 a las 9:00
Juan Giotta
sys.stdout.write
imprimirá sin carro de retorno
import sys
sys.stdout.write("installing xxx")
sys.stdout.write(".")
http://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
Posible duplicado de ¿Cómo evito que la impresión de Python agregue nuevas líneas o espacios?
– Cees Timmermann
9 de diciembre de 2016 a las 2:21
Las respuestas a esta pregunta no mencionan que a veces desea borrar la línea, consulte: stackoverflow.com/questions/45263205
– ideasman42
23 de julio de 2017 a las 9:44