如何在Matlab或Octave中刷新disp的输出?

时间:2010-04-13 20:37:09

标签: matlab octave flush disp

我在Octave中有一个程序有一个循环 - 运行一个带有各种参数的函数,而不是我可以变成矩阵的东西。在每次迭代开始时,我使用disp打印当前参数。

我第一次跑它时有brazillion警告,然后我也得到了这些照片。现在我清理了它们,我不再看到它们了。我的猜测是他们被困在缓冲区中,当程序结束或缓冲区填满时我会看到它们。

有没有办法强制刷新打印缓冲区,以便能看到我的打印件?

7 个答案:

答案 0 :(得分:43)

使用fflush(stdout)和/或fflush(stderr)从disp()刷新缓冲区。

答案 1 :(得分:27)

如moastab所述,fflush(stdout)适用于Octave。

在MATLAB中,使用drawnow('update')刷新输出。

MATLAB的drawnow函数对于那些在MATLAB中控制重绘图形对象的人来说很熟悉,但它也适用于stdout stderr缓冲区。 'update'选项不是必需的,但会将刷新限制为非图形队列。这个细节仅仅隐含在drawnow() documentation中;我已经验证它可以在循环中处理fprintf调用。

答案 2 :(得分:20)

Octave :您可以致电more off来关闭输出缓冲。

这将禁用分页,以便将所有输出直接发送到屏幕。

答案 3 :(得分:6)

将以下命令放在您的部分或代码的开头:

test

答案 4 :(得分:3)

如果我正确理解您的问题,您可以使用日记功能将所有会话输出转储到文本文件。 diary on将开始录制,diary off将停止。 diary filename将使用文件名而不是默认的“日记”。

它是Octave和MATLAB中的build -in函数。有关详细信息,请参阅help diary


您还可以增加Octave缓冲区大小。在Windows上,您可以在左上角菜单的“八度属性”对话框中执行此操作。

答案 5 :(得分:0)

drawnow会导致图表更新,我不确定它是否也适用于stdout管道。

您也可以将disp(...)语句转换为fprintf(stderr, ...),我认为stderr的处理方式与Octave上的stdout不同。

答案 6 :(得分:0)

在{em> Octave 中,至少here和其他地方有至少5种获取即时输出的方法。

使用以下一个

%---------------------------
% Turn OFF output buffering
%---------------------------
more off                        % command & NOT shown in output
PAGER = "less"                  % built-in var - shown in output
page_screen_output = 0          % built-in var - shown in output
page_output_immediately = 1     % built-in var - shown in output
fflush(stdout)                  % Need to call after each "output" line