【问题标题】:How can I suppress the output of a command in octave?如何抑制八度音阶命令的输出?
【发布时间】:2012-01-05 19:59:25
【问题描述】:

在 Octave 中,我可以抑制或隐藏在行尾添加分号的指令的输出:

octave:1> exp([0 1])
ans = [ 1.0000   2.7183 ]
octave:2> exp([0 1]);
octave:3> 

现在,如果函数在返回值之前显示文本(例如,使用 disp()print()),我该如何抑制输出?换句话说,我希望能够做到这一点:

disp("Starting...");
% hide text the may get displayed after this point
% ...
% show all text again after this point
disp("Done!");

【问题讨论】:

    标签: command-line octave


    【解决方案1】:

    快速解决您的问题,甚至可能不值得一提的是重载 disp 函数,如下所示:

    function disp(x)
    end
    

    那么原始的disp 函数不会被调用,而是你的函数不会产生任何输出。

    我还尝试以某种方式重定向八度音阶的stdout,但没有成功。我希望这种肮脏的解决方案可能足以满足您的情况^^

    【讨论】:

    • 这会导致disp 函数完全不可用,即使我自己使用也是如此。另外,给定的函数可能会使用其他方法来显示文本(例如 print、sprintf、printf 等)
    • @andersonvom 我同意。正如我提到的快速破解。虽然你仍然可以使用disp 方法,如果你使用像function disp(x, y) if nargin > 1 printf("%d", y) 这样的第二个参数。仍然它仍然是一个 hack,我仍然对 nice answer^^. 感兴趣
    • 重载 disp 不会停止 printf 的输出或省略 ;
    【解决方案2】:

    您可以修改PAGER 变量(现在是一个函数)来重定向标准输出。在 Unix 系统上,您可以将其重定向到 /dev/null。在 Windows 上,我尝试简单地重定向到一个什么都不做的 Python 程序,它运行良好。 (基本上,任何忽略输入的程序都可以)

    PAGER('/dev/null');
    page_screen_output(1);
    page_output_immediately(1);
    

    您可以在完成后将其更改回来。并且可能将整个过程封装在一个函数中。

    oldpager = PAGER('/dev/null');
    oldpso = page_screen_output(1);
    oldpoi = page_output_immediately(1);
    
    % Call function here
    
    PAGER(oldpager);
    page_screen_output(oldpso);
    page_output_immediately(oldpoi);
    

    您也可以简单地以非交互方式运行脚本,并正常重定向输出。

    octave script.m > /dev/null
    

    【讨论】:

    • 这有禁用所有文本显示的缺点,我希望能够从单个方法中隐藏文本但仍然能够显示我自己的文本。
    • 调用函数后改回来。我举了一个例子。据我所知,没有其他真正方便的方法可以做到这一点。
    【解决方案3】:

    这是一个非常古老的问题,但我仍然遇到了同样的问题,这里有一个可以提供帮助的技巧。可以使用evalc 来包装有问题的函数调用。例如。你有一个代码:

    [a, b] = verbose_func(x,y);
    

    现在你可以做到了:

    evalc('[a, b] = verbose_func(x,y)');
    

    让它保持沉默。

    很有趣,但它甚至可以与内部的其他 eval 一起使用。我的意思是我们可以:

    code_str = '[a, b] = verbose_func(x,y)';
    eval(code_str);
    

    这是冗长的。现在:

    code_str = '[a, b] = verbose_func(x,y)';
    evalc('eval(code_str)');
    

    这不是。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 2012-07-12
      • 2014-11-06
      • 2015-12-22
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2020-12-31
      • 2013-04-08
      相关资源
      最近更新 更多