Как я могу подавить вывод команды в октаве? - программирование
Подтвердить что ты не робот

Как я могу подавить вывод команды в октаве?

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

Ответ 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 октавы, но безуспешно. Я надеюсь, что этого грязного решения, возможно, будет достаточно в вашей ситуации ^^