En un script de Python copio un árbol de directorios y me gustaría imprimir un texto como este ...

print("Copying... ", end="")
shutil.copytree(src, dest)
print("DONE")

Sin embargo, el texto Copying... no se imprime hasta que la secuencia de comandos haya finalizado.

2
Robert Strauch 10 dic. 2015 a las 12:00

3 respuestas

La mejor respuesta

Necesita vaciar STDOUT, pero no es necesario incluir sys.stdout en la imagen. print puede hacer eso por usted:

print("Copying... ", end="", flush=True)
shutil.copytree(src, dest)
print("DONE")
3
Jashandeep Sohi 10 dic. 2015 a las 09:42

Las secuencias de salida no escriben en el terminal hasta el final de la línea, a menos que vacíe manualmente el búfer.

print("Copying... ", end="")
sys.stdout.flush()
shutil.copytree(src, dest)
print("DONE")

Este es exactamente el mismo comportamiento que se encuentra en otros lenguajes, como C y C ++, y por la misma razón.

6
Dietrich Epp 10 dic. 2015 a las 09:03

Inicie el intérprete de Python con la opción -u para utilizar la salida sin búfer. Ahora sus mensajes impresos aparecerán inmediatamente

2
mavroprovato 10 dic. 2015 a las 10:43
34197509