在Matlab中的evalc期间是否可以打印到控制台?

时间:2013-01-28 22:24:33

标签: matlab console

我有一个测试框架,其中每个测试都是一个M文件(例如,test_featureX.m),它对特殊(自定义)AssertionCollection类的实例进行断言。用户将在开发其功能时单独运行测试,并且可能希望在测试期间将有用信息打印到控制台,以帮助他们调试问题。我还有一个例程testAll,它运行整个存储库的所有测试,并以标准化的方式打印结果。在后一种用法中,我不希望在控制台上打印任何无关的信息,因此测试执行包含在evalc(evalc('test_featureX(ac);'))中,它隐藏了test_featureX所做的任何控制台写入。

现在,我希望testAll在每次断言时实时打印到屏幕。我想通过在将其传递给test_featureX之前向AssertionClass实例(ac)添加回调函数来实现此目的,并使该回调函数在每个传递的断言上打印更新。问题是回调函数是从源自evalc命令的调用堆栈中执行的,因此它的输出被路由到evalc字符串而不是控制台。

有没有办法强制输出到控制台,即使在evalc评估期间,我的回调可以打印状态到控制台,而testAll拒绝大多数标准写入控制台?

我希望结果可能如下:

s = evalc('testFunction();')
function testFunction()
    disp('line 1');
    fprintf('line 2\n');
    fprintf(TO_THE_CONSOLE, 'line 3\n');
end

...结果输出为

line 3
  s =
    line 1
    line 2

1 个答案:

答案 0 :(得分:0)

我认为不可能。 evalc捕获除错误之外的所有内容。您最好的选择是向testFunction添加一个返回参数,并在需要时显示它。