Python 2.7: Escribe al archivo al instante

Me di cuenta de que cuando escribo en un archivo usando python, espero hasta el final de mi archivo de Python para ejecutarlo:

outputFile = open("./outputFile.txt","a") outputFile.write("First") print "Now you have 10sec to see that outputFile.txt is still the same as before" time.sleep(10) outputFile.write("Second") print "Now if you look at outputFile.txt you will see 'First' and 'Second'" 

¿Cómo se supone que debo hacer que Python escriba instantáneamente en el archivo de salida?

Puede usar flush() o puede configurar el objeto de archivo para que no se almacene.

Detalles sobre el uso de ese parámetro para open() aquí .

Así que cambiarías tu llamada abierta a –

 outputFile = open("./outputFile.txt", "a", 0) 

Forzarlo con la función flush() , agregar

 outputFile.flush() 

al final de su código.

Como dijo @RyPeck, puede usar flush() o configurar el objeto de archivo para que no tenga buffer. Pero tenga en cuenta lo siguiente (de https://docs.python.org/2/library/stdtypes.html?highlight=file%20flush#file.flush ):

Lave el búfer interno, como fflush () de stdio.

Tenga en cuenta que flush () no necesariamente escribe los datos del archivo en el disco. Use flush () seguido de os.fsync () para asegurar este comportamiento.

Y una cita de man 3 fflush :

Tenga en cuenta que fflush () solo vacía los buffers de espacio de usuario proporcionados por la biblioteca de C. Para asegurarse de que los datos se almacenan físicamente en el disco, los búferes del kernel también deben vaciarse, por ejemplo, con sync (2) o fsync (2).

Solo para combinar todas las respuestas anteriores en un conjunto de funciones de utilidad útiles porque un requisito clave del OP (¡y yo mismo!) Es ” porque no quiero escribir outputFile.flush () cada vez “:

 import os import tempfile import time def write_now(filep, msg): """Write msg to the file given by filep, forcing the msg to be written to the filesystem immediately (now). Without this, if you write to files, and then execute programs that should read them, the files will not show up in the program on disk. """ filep.write(msg) filep.flush() # The above call to flush is not enough to write it to disk *now*; # according to https://stackoverflow.com/a/41506739/257924 we must # also call fsync: os.fsync(filep) def print_now(filep, msg): """Call write_now with msg plus a newline.""" write_now(filep, msg + '\n') # Example use with the with..as statement: with tempfile.NamedTemporaryFile(prefix='some_prefix_here.', suffix='.log', dir='.', delete=False) as logf: print_now(logf, "this is a test1") time.sleep(20) print_now(logf, "this is a test2")