Как я могу подавить вывод команды в октаве? - PullRequest
17 голосов
/ 24 ноября 2011

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

Ответы [ 3 ]

13 голосов
/ 29 ноября 2011

Вы можете изменить переменную 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 голосов
/ 25 ноября 2011

Быстрый взлом вашей проблемы и, возможно, даже не заслуживающий упоминания перегрузка функции disp, например:

function disp(x)
end

Тогда исходная функция disp не вызывается, а ваша, вместо которой не генерируется вывод.

Я также пытался как-то перенаправить stdout октавы, но безуспешно. Я надеюсь, что этого грязного решения, возможно, будет достаточно в вашей ситуации ^^

1 голос
/ 18 августа 2018

Это очень старый вопрос, но, тем не менее, я столкнулся с той же проблемой, и вот уловка, которая может помочь. Можно использовать 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)');

а это не так.

...