如何以八度为单位抑制命令的输出?

时间:2011-11-24 17:16:13

标签: command-line octave

在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!");

3 个答案:

答案 0 :(得分:13)

您可以修改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

答案 1 :(得分:2)

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

function disp(x)
end

然后原来的disp函数没有被调用,而是你的函数没有生成输出。

我也尝试以某种方式重定向八度stdout,但不成功。我希望这种肮脏的解决方案可能足以满足您的需求^^

答案 2 :(得分:1)

这是一个非常老的问题,但是仍然遇到相同的问题,这是可以解决问题的技巧。可以使用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)');

不是。