【问题标题】:How can I flush the output of disp in Matlab or Octave?如何在 Matlab 或 Octave 中刷新 disp 的输出?
【发布时间】:2011-02-07 15:33:25
【问题描述】:

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

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

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

【问题讨论】:

标签: matlab octave flush disp


【解决方案1】:

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

【讨论】:

  • 出于好奇,您知道是否有一个与 fflush() 等效的 Matlab 吗?我想做同样的事情,但我使用的是 Matlab,而不是 Octave,并且没有 fflush() 函数。
  • 在 MATLAB 中,使用 drawnow('update') 刷新输出。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      page_screen_output(0);
      
      page_output_immediately(1);
      

      【讨论】:

        【解决方案5】:

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

        它是 Octave 和 MATLAB 中的内置函数。更多详情请见help diary


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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            here 和其他地方,至少有 5 种方法可以在 Octave 中获得立即输出。

            使用以下一个

            %---------------------------
            % 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
            

            【讨论】:

              猜你喜欢
              • 2013-03-11
              • 2013-11-23
              • 1970-01-01
              • 1970-01-01
              • 2011-07-12
              • 2020-01-04
              • 2014-02-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多