Python script imprime la salida de os.system antes de imprimir

Tengo un script de python test.py:

print "first" import os os.system("echo second") 

En linux comando linea ejecuto

 python test.py 

que devuelve:

 first second 

Entonces ejecuto

 python test.py > test.out; cat test.out 

que devuelve

 second first 

¿Qué pasa con la redirección de la salida hace que la llamada os.system se imprima antes de la statement de impresión?

Cuando se está enviando a una tubería, Python almacena en búfer su salida que se escribe en sys.stdout y la emite después de una descarga, una vez que se desborda o se cierra (cuando el progtwig sale). Si bien almacenará en búfer las llamadas de impresión, el sistema llamará la salida directamente a la salida estándar y su salida no se almacenará en el búfer. Por eso estás viendo tal precedencia. Para evitar eso, usa python -u :

 python -u test.py > test.out; cat test.out 

Ver más información aquí .

EDITAR : explicación sobre cuándo se vaciará el búfer.

Otra forma de evitar el almacenamiento en búfer del sistema operativo es vaciar la salida después de la primera impresión:

 #!/usr/bin/env python import sys print "first" sys.stdout.flush() import os os.system("echo second") 

Cuando la salida de la secuencia de comandos de Python es una tty, su salida es un búfer de línea. Cuando la salida es un archivo normal, la salida se almacena en búfer.