【问题标题】:How to make GNU Octave auto-flush results while running the script如何在运行脚本时使 GNU Octave 自动刷新结果
【发布时间】:2016-01-04 03:17:37
【问题描述】:

当脚本函数运行时,fprintfdisp 命令产生的结果不会显示在终端中,只有在执行结束(或停止)时才会显示。 fflush 解决了问题,但是每次打印后使用起来很繁琐。有没有办法自动刷新到终端?

使用版本 3.8.1。

【问题讨论】:

  • 这里的讨论似乎也指向图形。我的问题是如何激活以前版本和 Matlab 中的自动刷新行为。
  • 该问题中的讨论似乎是在谈论图形,因为在 Matlab 中,相同的函数会刷新图形和 io 缓冲区。我向您保证,它讨论了您遇到的确切问题。
  • 我认为你是对的,这里给出了同样的答案。如果没有新的贡献可以丰富另一个问题的讨论,我会删除它。

标签: printf echo octave


【解决方案1】:

要自动刷新东西,设置:

page_output_immediately (1);

并在没有寻呼机的情况下将其发送到标准输出,设置:

page_screen_output (0);

Octave 手册中有一个关于此主题的部分,Paging Screen Output

【讨论】:

    【解决方案2】:

    您有两个主要选择:

    1. 每次打印后致电fflush(stdout())
    2. 如果您的系统自动刷新 stderr(例如 Linux),则打印到 stderr 而不是 stdout

    选项 1 通常更好,因为它对系统的依赖性较小。任何一种解决方案都可以使用varargin 轻松封装在您自己的打印函数中:

    function n = my_print(varargin)
        n = fprintf(stdout(), varargin{:});
        fflush(stdout());
    end
    

    【讨论】:

    • 这意味着到处输入烦人的fflush 命令。我正在使用 Linux,我最初的问题更多是关于如何使系统自动刷新。我会相应地编辑它。
    • 打印到stderr 解决了我系统中fprintf 命令的问题。不知道disp是否也可以发给stderr,原则上是不行的。
    • 我建议将 fprintf() 包装在您自己的函数中,以确保调用 fflush()。这保留了 stderr 的含义,并允许您通过管道到 null 来隐藏 stdout。
    • @RyanTennill。这是一个很好的建议。我已将其纳入我的答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2017-10-16
    • 2017-07-21
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多