Salida en vivo desde el comando de subproceso

Estoy usando un script de Python como controlador para un código de hidrodinámica. Cuando llega el momento de ejecutar la simulación, usosubprocess.Popen para ejecutar el código, recopile la salida de stdout y stderr en unsubprocess.PIPE --- luego puedo imprimir (y guardar en un archivo de registro) la información de salida y comprobar si hay errores. El problema es que no tengo idea de cómo está progresando el código. Si lo ejecuto directamente desde la línea de comandos, me da salida sobre qué iteración es, a qué hora, cuál es el siguiente paso de tiempo, etc.

¿Hay alguna forma de almacenar la salida (para registro y verificación de errores) y también producir una salida de transmisión en vivo?

La sección correspondiente de mi código:

ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
output, errors = ret_val.communicate()
log_file.write(output)
print output
if( ret_val.returncode ):
    print "RUN failed\n\n%s\n\n" % (errors)
    success = False

if( errors ): log_file.write("\n\n%s\n\n" % errors)

Originalmente estaba canalizando elrun_command mediantetee de modo que una copia fue directamente al archivo de registro, y la transmisión aún se envía directamente al terminal, pero de esa manera no puedo almacenar ningún error (a mi entender).

Editar:

Solución temporal:

ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()

luego, en otra terminal, corretail -f log.txt (S t.log_file = 'log.txt').

Respuestas a la pregunta(13)

Su respuesta a la pregunta