De http://docs.python.org/library/functions.html#open¿Por qué la salida estándar del subproceso (redirigido a un archivo sin búfer) se almacena en el búfer?
El argumento bufsize opcional especifica deseado tamaño de búfer del archivo: 0 significa sin búfer, 1 significa línea tamponada, cualquier otro valor positivo medios utilizan un tampón de que el tamaño (aproximadamente). Un tamaño negativo de buffete a usa el sistema predeterminado, que es , usualmente almacenado en línea para los dispositivos tty y totalmente almacenado en el búfer para otros archivos. Si se omite , se usa el sistema predeterminado.
Estoy pasando 0 como bufsize debajo sin usar flush() no hay salida escrita en el archivo cuando ejecuto main_process.
¿Cuál es el motivo?
# --------------------------------- sub_process.py
import sys
import time
if __name__ == '__main__':
print 'printed from redirect.py'
# why is the following flush() needed? 'std-output' is (?) unbuffered...
sys.stdout.flush()
time.sleep(6)
# --------------------------------- main_process.py
import subprocess
import time
if __name__ == '__main__':
p = subprocess.Popen(
['python', 'sub_process.py'],
stdout=open('std-output', 'w', 0))
time.sleep(3)
p.terminate()
+1, pasé unos 30 minutos tratando de descubrir por qué 'sys.stdout' ->' subprocess.PIPE' no funcionaba hace un par de días. 'flush()' es la respuesta, pero ¿por qué lo necesitamos? –