[英]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.