2017-02-15 6 views
1

Я пытаюсь подавить вывод из секции кода в скрипте (а именно, инициализацию сети из сети Caffe). Я попробовал оборачивать соответствующий бит кода в evalc командыПодавление вывода на stderr в matlab

[suppressed_output, var_output] = evalc('someFunction(input)'); 

Но это не работает. У меня все еще есть множество строк (без ошибок) вывода из инициализации сети, которые забивают мои журналы (среди всего желаемого выхода, напечатанного через fprintf('') в скрипте). Я думаю, что это происходит потому, что соответствующая функция записи в STDERR - первая строка печатает это предупреждение (вместо STDOUT?):

WARNING: Logging before InitGoogleLogging() is written to STDERR 

... а затем сотни строк, что она делает следовать, например:

I0215 15:01:51.840272 28620 upgrade_proto.cpp:66] Attempting to upgrade input file specified using deprecated input fields: tmp-def.prototxt 
I0215 15:01:51.840360 28620 upgrade_proto.cpp:69] Successfully upgraded file specified using deprecated input fields. 
... 

Могу ли я как-то подавить вывод на STDERR (без баловаться с содержанием функции)? Идеально только локально для этой конкретной функции, так как я все равно хотел бы получить потенциальные сообщения об ошибках.

В случае уместно: я называю myScript с помощью команды MATLAB линии и ее вывод записывается в журнал (mlexec.log) с tee:

matlab -nodesktop -nosplash -display :1 -r "try, myScript; catch e, disp(getReport(e)), end, quit force" 2>&1| tee mlexec.log 
+0

Я думаю, что синтаксис '2> NUL' – Rotem

+0

@Rotem ничего себе, что на самом деле указывает на недостаток. '2> & 1' передал выход' STDERR' прямо на 'STDOUT', который мне нужен для отладки waaay назад. Поток «STDERR» ('2') в Nirvana' 2> NUL' или другой файл журнала ('2> mlexec.stderr.log') решает проблему. Спасибо, вы хотите, чтобы сообщение было ответом, поэтому я могу принять его? – Honeybear

+0

Рад, что я мог бы помочь ... Вы позволили опубликовать его как ответ, если хотите. – Rotem

ответ

0

Проблема заключается в том, что в вызове командной строки matlab вывод из STDERR передается по этой команде: 2>&1. Поскольку файл .cpp, кажется, передает свой вывод в STDERR (в соответствии с предупреждением), он будет перенаправлен на STDOUT и, в конечном итоге, на журнал.

Поток STDERR (2) в Нирвану с 2>NUL или другим файлом журнала (например, 2>mlexec.stderr.log) решает проблему.

-2

Я хотел отправить это в комментариях, но он сказал, что я должен был иметь 50 репутации (у меня есть 49 сейчас ...)

Я думаю this is what you're looking for EDIT/UPDATE:

Одна вещь, которую вы можете сделать, это заключить раздел кода с предупреждением на заявления/выключения следующим образом:

warning('off','all') 
%your code here 
warning('on','all') 

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

+0

Это ответ только для ссылок, которые обычно обескуражены (разрыв ссылок и т. Д.). Расширяйте содержание по ссылке, относящееся к вопросу, или удаляйте его. – horchler

+0

Прошу прощения за не совсем полный ответ.Я пробовал комментировать, но я не был достаточно долго, чтобы получить репутацию, чтобы публиковать комментарии к сообщениям других людей. Надеюсь, это позаботится об этом @horchler :) – robotHamster

+0

@sharif anani: Спасибо за предложение и отредактируйте. Я знаю опцию 'warning ('off', 'all')', но еще не пробовал, поскольку проблема заключается не в предупреждении, а во всех других строках (которые записываются в STDERR). Тем не менее я дал ему попробовать, но без эффекта. Интересно, что цитируемое предупреждение тоже не исчезает. Я предполагаю, что это часть текста, написанного на STDERR, происходящего не из Matlab, а из .cpp-источников (и, следовательно, не может быть отключена командой Matlab). – Honeybear

Смежные вопросы