2010-04-13 9 views
31

Tengo un programa en Octave que tiene un bucle - ejecuta una función con varios parámetros, no algo que puedo convertir en matrices. Al comienzo de cada iteración, imprimo los parámetros actuales usando disp.¿Cómo puedo descargar la salida de disp en Matlab u Octave?

Las primeras veces que lo ejecuté tuve un brazillion advertencias, y luego también obtuve estas impresiones. Ahora que los limpié, ya no los veo. Supongo que están atrapados en un buffer, y los veré cuando el programa termine o el buffer se llene.

¿Hay alguna manera de forzar el lavado del buffer de impresión para que pueda ver mis impresiones?

+0

Aquí hay más información, incluyendo información sobre paginación: http://www.chemie.fu-berlin.de/chemnet/use/ info/octave/octave_22.html – Nucular

+0

¿Sucede también en Matlab? –

Respuesta

39

Utilice fflush (stdout) y/o fflush (stderr) para eliminar el búfer de disp().

+10

Por curiosidad, ¿sabes si hay un Matlab equivalente a fflush()? Me gustaría hacer lo mismo, pero uso Matlab, no Octave, y no hay función fflush(). –

+3

En MATLAB, use 'drewow ('update')' para purgar la salida. –

3

Si entiendo su pregunta correctamente, puede utilizar diario función para volcar todos los resultados de la sesión a un archivo de texto. diary on comenzará a grabar, y diary off se detendrá. diary filename usará nombre de archivo en lugar de "diario" predeterminado.

Es la función build-in tanto en Octave como en MATLAB. Para más detalles, ver help diary.


También puede aumentar el tamaño de la memoria intermedia de octava. En Windows puede hacerlo en el cuadro de diálogo Propiedades de Octave desde el menú de la esquina superior izquierda.

0

drawnow causará la actualización de los gráficos, no estoy seguro de si también funciona en la tubería stdout.

Usted también puede convertir sus disp(...) declaraciones a fprintf(stderr, ...), creo stderr se maneja diferente a stdout en Octave.

26

Según lo mencionado por moastab, fflush(stdout) funciona para Octave.

En MATLAB, use drawnow('update') para enjuagar la salida.

La función drawnow de MATLAB es familiar para aquellos que desean controlar el redibujado de objetos gráficos en MATLAB, pero se aplica a los búfers stdout stderr también. La opción 'update' no es necesaria, pero limita el lavado a las colas no gráficas. Este detalle está meramente implícito en el drawnow() documentation; He verificado que funciona en llamadas fprintf en un bucle.

19

Octave: Puede desactivar el almacenamiento en búfer de la salida llamando al more off.

Esto deshabilitará la paginación de modo que toda la salida se envíe directamente a la pantalla.

5

puso a los siguientes comandos en el inicio de su sección o su código:

page_screen_output(0); 

page_output_immediately(1); 
Cuestiones relacionadas