Al escribir el retorno de carro en una consola pycharm, ¿se borra toda la línea?

Tengo un progtwig en Python que hace un uso extensivo del carácter de avance de línea para producir el efecto de una línea de consola de actualización (específicamente una barra de progreso).

Al tratar de depurar el código en PyCharm, vi que la barra de progreso no se imprime hasta que se hace.

Tras una nueva inspección, resultó que cuando se imprime un retorno de carro ( \r ), se elimina toda la línea.

Debido a que la biblioteca misma escribe cadenas del formulario ( {line}\r ), siempre obtengo una línea vacía.

¿Hay alguna manera de resolver esto usando PyCharm? Actualmente, lo que haré es reemplazar la versión stdout por una versión que registra la línea actual y la vuelve a imprimir después de recibir un retorno de carro. Sin embargo, preferiría tener una forma sencilla de hacerlo.

Código de muestra:

 import sys sys.stdout.write('xxx') sys.stdout.flush() time.sleep(1) sys.stdout.write('\rZZ') sys.stdout.flush() time.sleep(1) sys.stdout.write('yyy\r') sys.stdout.flush() time.sleep(1) print ('===') 

Mi carrera se ve así:
1. ‘xxx’ está impreso
[Después de 1 segundo]
2. ‘ZZ’ se imprime
[Después de 1 segundo]
3. Se borra la línea.
[Después de 1 segundo]
4. ‘===’ se imprime y el progtwig termina

Esto sucede tanto en la depuración como en la consola de ejecución cuando se ejecuta este script.

Recientemente me encontré con el mismo problema y encontré una solución. La respuesta está realmente en tu post. Como dijiste, el retorno de carro borra toda la línea. Para evitar el problema, imprima el retorno de carro solo cuando imprima la nueva línea, así:

Imprima cada línea con el retorno de carro al inicio y sin el final predeterminado = ‘\ n’. No necesitaba el color, aunque no hice muchas pruebas.

 print('\rxxx', end='') # sys.stdout.flush() time.sleep(1) 

Continuar así …

 print('\rZZ', end='') time.sleep(1) print('\ryyy', end='') time.sleep(1) 

Para mantener la última impresión, mantenga el final predeterminado.

 print('\r===') 

Espero que esto funcione para usted.

Franco

Tenga cuidado con el corto tiempo entre impresiones y la corta longitud de las cadenas impresas; la impresión puede ser complicada e imprimir pocos valores en una fila.

Para solucionar el problema, puede agregar un segundo después del carácter blanco:

 for i in range(10): print("\r \r{0}".format(str(i)), end='') time.sleep(0.1) 

Mi solución para un problema similar: https://stackoverflow.com/a/44524422/6857902

El error todavía está activo y se informó aquí . Por el momento, si utiliza Ejecutar> Configuración> “Emular terminal en la consola de salida”, el retorno de carro funcionará según lo previsto.