separar - salto de linea en python
Cómo restablecer el cursor al principio de la misma línea en Python (4)
La mayoría de las preguntas relacionadas con estos temas aquí en SO son las siguientes:
Cómo imprimir cierta información en la misma línea sin introducir una nueva línea
En cambio, mi pregunta es la siguiente:
Espero ver el siguiente efecto,
>> You have finished 10%
Donde los 10
siguen aumentando en el mismo tiempo. Sé cómo hacer esto en C ++ pero no puedo encontrar una buena solución en python.
Python 3
Puede utilizar argumentos de palabras clave para print
:
print(''string'', end=''/r'', flush=True)
-
end=''/r''
reemplaza el comportamiento predeterminado de fin de línea con''/r''
-
flush=True
descarga el búfer, lo que hace que el texto impreso aparezca inmediatamente.
Python 2
En la versión 2.6+, puede utilizar from __future__ import print_function
al inicio del script para habilitar el comportamiento de Python 3. O usa la forma antigua:
La print
de Python coloca una nueva línea después de cada comando, a menos que lo suprima con una coma al final. Entonces, el comando de impresión es:
print ''You have finished {0}%/r''.format(percentage),
Tenga en cuenta la coma al final.
Desafortunadamente, Python solo envía la salida al terminal después de una línea completa. Lo anterior no es una línea completa, por lo que debe flush
manualmente:
import sys
sys.stdout.flush()
En Linux (y probablemente en Windows) puede usar el módulo de curses como este
import time
import curses
win = curses.initscr()
for i in range(100):
win.clear()
win.addstr("You have finished %d%%"%i)
win.refresh()
time.sleep(.1)
curses.endwin()
Benfit con curses como se adjunta a otra técnica más simple es que puede dibujar en el terminal como un programa de gráficos, porque los curses permiten moverse a cualquier posición x, y, por ejemplo, a continuación hay un script simple que actualiza cuatro vistas.
import time
import curses
curses.initscr()
rows = 10
cols= 30
winlist = []
for r in range(2):
for c in range(2):
win = curses.newwin(rows, cols, r*rows, c*cols)
win.clear()
win.border()
winlist.append(win)
for i in range(100):
for win in winlist:
win.addstr(5,5,"You have finished - %d%%"%i)
win.refresh()
time.sleep(.05)
curses.endwin()
el uso de sys.stdout.write()
lugar de trabajos de impresión en python 2 y 3 sin ningún compromiso.
import sys, time
for i in xrange(0, 101, 10):
print ''/r>> You have finished %d%%'' % i,
sys.stdout.flush()
time.sleep(2)
print
El /r
es el retorno de carro. Necesita la coma al final de la declaración de print
para evitar la nueva línea automática. Finalmente, se necesita sys.stdout.flush()
para vaciar el búfer a la salida estándar.