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

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

page_screen_output(0);

page_output_immediately(1);

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

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


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

Здесь и в других местах есть как минимум 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

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

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

Другие вопросы по тегам