Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line 如何抑制八度命令的输出?_Command Line_Octave - Fatal编程技术网

Command line 如何抑制八度命令的输出?

Command line 如何抑制八度命令的输出?,command-line,octave,Command Line,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 po

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

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

您的问题的一个快速解决方法是重载
disp
函数,如下所示:

function disp(x)
end
然后不调用原始的
disp
函数,而是调用您的函数,其中不生成任何输出


我还试图以某种方式重定向八度音阶的标准音,但没有成功。我希望这个肮脏的解决方案可能在您的情况下就足够了^ ^

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

完成后你可以把它换回来。也许可以将整个过程封装在一个函数中

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

这是一个非常古老的问题,但我还是遇到了同样的问题,这里有一个技巧可以帮助我。可以使用
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)');

这不是。

这会导致
disp
功能完全不可用,即使是我自己使用。另外,给定的函数可能会使用其他方法来显示文本(例如print、sprintf、printf等)@andersonvom我同意。正如我提到的,这是一个快速破解。但是,如果使用第二个参数,如
函数disp(x,y),如果nargin>1 printf(“%d”,y)
,则仍然可以使用
disp
方法。尽管如此,这仍然是一个难题,我仍然对漂亮的答案感兴趣。^^重载disp不会停止printf的输出或省略;这样做的缺点是禁用所有文本显示,我希望能够从单个方法中隐藏文本,但仍然能够显示我自己的文本。只需在调用函数后将其更改回来。我举了一个例子。据我所知,没有其他真正方便的方法来实现这一点。
code_str = '[a, b] = verbose_func(x,y)';
evalc('eval(code_str)');