2010-08-29 7 views
8

Compare:¿Por qué sys.stdout.write (' b') no retrocede contra las nuevas líneas?

for item in range(0, 5): 
    sys.stdout.write('c') 
for item in range(0, 5): 
    sys.stdout.write('\b') 

Obras como se puede imaginar, pero:

for item in range(0, 5): 
    sys.stdout.write('\n') 
for item in range(0, 5): 
    sys.stdout.write('\b') 

todavía le deja con cinco caracteres de nueva línea. ¿Algunas ideas?

+1

Aparte: también puede usar ''\ b' * 5' para [crear una cadena de caracteres 5' \ b'] (http://stackoverflow.com/a/1424016/1174169) en lugar de iterar sobre un distancia. – cod3monk3y

Respuesta

16

Puede parecer razonable hoy en día esperar que el retroceso sea capaz de trabajar sobre caracteres de nueva línea, en una consola, pero que no sería retrocompatible con teletipos ya que no hay avance de línea inverso.

+3

esto me dio nostalgia por el ruido de una máquina de escribir, por solo unos 120 ms. – msw

+0

A la luz de esto, algunos pueden encontrar [esta respuesta] (http://stackoverflow.com/a/517207/1174169) útil para una forma simple de reescribir una línea en stdout. Sinopsis: 'sys.stdout.write ('ccccc \ r')' que te ahorra saber hasta dónde hacer una copia de seguridad si quieres volver a la nueva línea. – cod3monk3y

4

Esto es sobre el comportamiento de las ventanas de la consola: los espacios de retroceso solo funcionan dentro de una línea, no harán copias de seguridad en las nuevas líneas.

0

Esto no tiene absolutamente nada que ver con Python. Es su controlador de consola el que maneja los efectos visuales. La mayoría de ellos emulará un teletipo ASR33 ... retroceso significa mover el cabezal de impresión un espacio hacia la posición de inicio de línea, si es posible.

Cuestiones relacionadas