Как я могу сбросить вывод disp в Matlab или Octave? - PullRequest
36 голосов
/ 14 апреля 2010

У меня есть программа в Octave, в которой есть цикл - запуск функции с различными параметрами, а не то, что я могу превратить в матрицы. В начале каждой итерации я печатаю текущие параметры, используя disp.

В первый раз, когда я запускал его, у меня было бразильон предупреждений, а затем я также получил эти отпечатки. Теперь, когда я их почистил, я их больше не вижу. Я предполагаю, что они застряли в буфере, и я увижу их, когда программа завершится или буфер заполнится.

Есть ли способ принудительно очистить буфер печати, чтобы я мог видеть свои отпечатки?

Ответы [ 7 ]

43 голосов
/ 14 апреля 2010

Используйте fflush (stdout) и / или fflush (stderr), чтобы очистить буфер от disp ().

27 голосов
/ 19 ноября 2011

Как упомянул moastab, fflush(stdout) работает для Octave.

В MATLAB используйте drawnow('update') для очистки вывода.

Функция

MATLAB drawnow будет знакома тем, кто контролирует перерисовку графических объектов в MATLAB, но она также применима и к буферам stdr stdr. Параметр 'update' не требуется, но ограничивает сброс неграфическими очередями. Эта деталь просто подразумевается в документации drawnow () ; Я проверил его для работы с вызовами fprintf в цикле.

20 голосов
/ 02 февраля 2012

Октава : Вы можете отключить буферизацию вывода, вызвав more off.

Это отключит нумерацию страниц, так что весь вывод будет отправлен прямо на экран.

6 голосов
/ 21 июля 2015

Поместите следующие команды в начало вашего раздела или вашего кода:

page_screen_output(0);

page_output_immediately(1);
3 голосов
/ 14 апреля 2010

Если я правильно понимаю ваш вопрос, вы можете использовать функцию дневник , чтобы вывести весь вывод сессии в текстовый файл. diary on начнет запись, а diary off остановится. diary filename будет использовать имя файла вместо стандартного "дневника".

Это встроенная функция в Octave и MATLAB. Для получения более подробной информации см help diary.


Также вы можете увеличить размер буфера октавы. В Windows это можно сделать в диалоговом окне «Свойства октавы» в верхнем левом углу меню.

0 голосов
/ 20 марта 2019

С здесь и в других местах есть как минимум 5 способов получения немедленного вывода, в Октава .

Используйте один из следующего:

%---------------------------
% Turn OFF output buffering
%---------------------------
more off                        % command & NOT shown in output
PAGER = "less"                  % built-in var - shown in output
page_screen_output = 0          % built-in var - shown in output
page_output_immediately = 1     % built-in var - shown in output
fflush(stdout)                  % Need to call after each "output" line
0 голосов
/ 14 апреля 2010

drawnow приведет к обновлению графиков, я не уверен, что он работает и на stdout трубе.

Вы также можете преобразовать свои disp(...) операторы в fprintf(stderr, ...), я думаю, stderr обрабатывается иначе, чем stdout в Октаве.

...