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

Nat*_*man 38 matlab flush octave disp

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

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

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

小智 45

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

  • 出于好奇,你知道是否有一个相当于fflush()的Matlab?我想做同样的事情,但我使用Matlab,而不是Octave,并且没有fflush()函数. (10认同)
  • 在MATLAB中,使用`drawnow('update')`来刷新输出. (5认同)

Art*_*ert 28

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

在MATLAB中,用于drawnow('update')刷新输出.

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


小智 20

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

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


小智 7

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

page_screen_output(0);

page_output_immediately(1);
Run Code Online (Sandbox Code Playgroud)