Как я могу очистить вывод disp в Matlab или Octave?

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

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

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


person Nathan Fellman    schedule 13.04.2010    source источник
comment
Вот еще, включая информацию о подкачке: chemie.fu- berlin.de/chemnet/use/info/octave/octave_22.html   -  person Nucular    schedule 31.01.2012
comment
Это происходит и в Matlab?   -  person Andrey Rubshtein    schedule 02.02.2012


Ответы (7)


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

person moastab    schedule 14.04.2010
comment
Из любопытства, знаете ли вы, есть ли в Matlab эквивалент fflush()? Я хотел бы сделать то же самое, но я использую Matlab, а не Octave, и нет функции fflush(). - person Andrew Janke; 14.04.2010
comment
В MATLAB используйте drawnow('update'), чтобы очистить вывод. - person Arthur Hebert-Ryan; 16.03.2016

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

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

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

person Arthur Hebert-Ryan    schedule 19.11.2011

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

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

person Micke    schedule 02.02.2012

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

page_screen_output(0);

page_output_immediately(1);
person Charles Valente    schedule 21.07.2015

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

Это встроенная функция как в Octave, так и в MATLAB. Подробнее см. help diary.


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

person yuk    schedule 13.04.2010

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

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

person mtrw    schedule 13.04.2010

Из здесь и других источников можно найти по адресу не менее 5 методов для получения немедленного вывода в Octave.

Используйте один из следующих вариантов:

%---------------------------
% 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
person not2qubit    schedule 20.03.2019