簡體   English   中英

如何以八度為單位抑制命令的輸出?

[英]How can I suppress the output of a command in 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!");

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

快速破解你的問題,甚至可能不值得一提的是重載disp函數,如下所示:

function disp(x)
end

然后不調用原始的disp函數,而是調用未生成輸出的函數。

我也試圖以某種方式重定向stdout倍頻的,但未果。 我希望這種骯臟的解決方案可能足以滿足您的需求^^

這是一個非常古老的問題,但是,我仍然遇到了同樣的問題,這就是可以提供幫助的技巧。 可以使用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)');

而事實並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM