以编程方式确定脚本是否正常发布或执行

时间:2016-06-02 20:19:41

标签: matlab publish

在发布R2016a之前,publishing在MATLAB中是 方式来记录脚本的结果。我发现当我手动运行脚本时,我经常在脚本中放置pause个命令。有没有一种简单的方法来确定脚本是否已发布?然后,我可以将我的暂停包含在一些代码中:

if isNotPublishing
    pause();
end

我的google foo让我无法找到解决方案。

1 个答案:

答案 0 :(得分:5)

一种简单的方法是查看调用堆栈中是否有publishdbstack将返回一个struct数组,表示调用了哪些函数以什么顺序到达我们调用dbstack的点。我们可以使用name属性告诉我们所有这些函数的名称,并查看其中是否有publish。如果是,那么我们假设脚本是通过publish调用的。

stack = dbstack;
isBeingPublished = ismember('publish', {stack.name});

或者如果你想要一个单行

isBeingPublished = ismember('publish', cellfun(@(x)x.name, dbstack, 'UniformOutput', 0));

无论您是使用发布工具栏还是使用

命令行发布脚本,这都应该有效
publish('myscript.m')

如果你想变得非常花哨,你可以重载pause(或编写你自己的版本,mypause),为你做这个检查。这是有效的,因为在新的pause函数中,dbstack仍会包含publish,因为您是从脚本调用它,最终由publish进行评估。如果您创建此功能,那么您在代码中不需要所有逻辑,而只需拨打mypause()

function mypause(varargin)
    stack = dbstack;
    if ~ismember('publish', {stack.name});
        builtin('pause', varargin{:})
    end
end