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

问题描述 投票:35回答:7

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

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

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

matlab octave flush disp
7个回答
43
投票

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


27
投票

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

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

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


20
投票

八度:您可以通过调用more off来关闭输出缓冲。

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


6
投票

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

page_screen_output(0);

page_output_immediately(1);

3
投票

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

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


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


0
投票

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

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


0
投票

here和其他地方来看,在Octave中至少有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
© www.soinside.com 2019 - 2024. All rights reserved.