我正在尝试抑制脚本中代码部分的输出(即来自Caffe网络的网络初始化)。我已经尝试在evalc
命令
[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命令行调用myScript
,并将其输出写入带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 :(得分:0)
这里的问题是,在matlab命令行调用中,STDERR
的输出通过此"命令":STDOUT
流式传输到2>&1
。由于.cpp文件似乎将其输出流式传输到STDERR
(根据警告),它将被转发到STDOUT
并最终转发到日志。
使用STDERR
或其他日志文件(例如2>NUL
)将2>mlexec.stderr.log
(2)流式传输到Nirvana可以解决问题。
答案 1 :(得分:-2)
我想在评论中发帖,但它说我必须有50个声誉(我现在有49个......)
我认为this is what you're looking for 修改/更新:强>
您可以做的一件事是将代码的一部分用警告开/关语句括起来,如下所示:
warning('off','all')
%your code here
warning('on','all')
这应该停止从该部分输出到stderr
的任何警告。我个人不推荐这个,很高兴知道你正在做什么,MATLAB运行时不喜欢。