在matlab

时间:2017-02-15 14:29:12

标签: matlab logging stderr

我正在尝试抑制脚本中代码部分的输出(即来自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

2 个答案:

答案 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运行时不喜欢。