我試圖壓制腳本中的代碼段的輸出(即從Caffe網絡進行網絡初始化)。我已經試過包裝相應的代碼位的evalc
命令抑制輸出到matder中的stderr
[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
(不與功能內容搞亂)?理想情況下,只能在本地執行此特定功能,因爲我仍然希望獲得潛在的錯誤消息。
如果它是相關的: 我通過MATLAB命令行和它的輸出與tee
寫入日誌(mlexec.log
)調用myScript
:
matlab -nodesktop -nosplash -display :1 -r "try, myScript; catch e, disp(getReport(e)), end, quit force" 2>&1| tee mlexec.log
我認爲語法是'2> NUL' – Rotem
@Rotem哇,實際上指出了這個缺陷。 '2>&1'將'STDERR'輸出流式傳輸到'STDOUT',這是我調試waaay所需要的。將'STDERR'('2')流式傳輸到Nirvana'2> NUL'或另一個日誌文件('2> mlexec.stderr.log')解決了這個問題。謝謝 - 你想發佈這個作爲答案,所以我可以接受它? – Honeybear
很高興我能幫到你...如果你願意,你可以把它作爲答案發布。 – Rotem