如何在 Matlab 中使用 onCleanup 保存变量?
Posted
技术标签:
【中文标题】如何在 Matlab 中使用 onCleanup 保存变量?【英文标题】:How to save variables with onCleanup in Matlab? 【发布时间】:2015-07-13 17:56:32 【问题描述】:我有一个在集群上运行的 Matlab 脚本。如果时间超过某个时间点,它就会被杀死。我想在脚本被杀死之前使用 onCleanup 保存一些(或全部)变量。
我尝试了以下方法:
function [] = test
ita = 5;
finishup = onCleanup(@() save('test.mat','ita'));
pause(7200);
disp('done')
exit
end
我认为变量“ita”在执行 onCleanup 之前被杀死,它没有找到该变量。如果我将函数转换为脚本,也会出现同样的情况。
ita = 5;
finishup = onCleanup(@() save('test.mat','ita'));
pause(7200);
disp('done')
exit
我怎样才能做到正确?
当然,如果我在函数中使用 onCleanup,那么它会在函数停止后立即执行(例如 ctrl+c)。如果我使用脚本,那么只有在 Matlab 退出时才会执行 onCleanup。
【问题讨论】:
这真的不是onCleanup
的设计行为。来自 MATLAB 的文档:“您的清理例程不应依赖于在该例程之外定义的变量。”这意味着,正如您所发现的,局部变量不能在清理函数中使用。你确定如果函数被杀死,onCleanup
会被调用吗?如果确实如此,我会感到惊讶,在这种情况下,这将不是您正在寻找的解决方案。
【参考方案1】:
我不会完全推荐这个......但它是您问题的解决方案。将ita
设置为global
,然后使用子函数调用来进行清理/MAT 文件保存。这样ita
在范围内。
当函数完成或我在暂停期间按 Ctrl+C 时,此方法有效。
function [] = test()
global ita
ita = 5;
finishup = onCleanup(@() cleanMe());
pause(7200);
disp('done')
function cleanMe()
global ita
save('test.mat','ita')
【讨论】:
以上是关于如何在 Matlab 中使用 onCleanup 保存变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在从 Matlab 调用的 mex 函数中使用 Matlab 引擎
如何在 Linux 终端中使用 MCR(Matlab 编译器运行时)运行 Matlab 文件?
MATLAB | 如何在MATLAB中使用python全部colormap配色