Как я могу подавить вывод команды в октаве?
В 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!");
Ответы
Ответ 1
Вы можете изменить переменную 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
Ответ 2
Быстрый взлом вашей проблемы и, возможно, даже не стоит упоминать, это перегрузка функции disp
следующим образом:
function disp(x)
end
Тогда исходная функция disp
не вызывается, а вместо нее вместо нее выдается не выход.
Я также попытался как-то перенаправить stdout
октавы, но безуспешно. Я надеюсь, что этого грязного решения, возможно, будет достаточно в вашей ситуации ^^