matlab - 如何在 Matlab 中使用 onCleanup 保存变量?

标签 matlab

我有一个在集群上运行的 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。

最佳答案

我不会完全推荐这个...但它可以解决您的问题。将 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 - 如何在 Matlab 中使用 onCleanup 保存变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31390225/

相关文章:

matlab - 在 "positive"Y 轴上绘制一组负数据

matlab - 在 Matlab 中打印非 ASCII/符号字符

algorithm - 如何有效地对分区数组进行排序?

matlab - 图像无法正确显示

c++ - 从 C++ dll 返回数组到 matlab

matlab - 如何在 Matlab 中定义错误栏

matlab - 如何遍历两个相同大小的矩阵并比较它们

matlab - 如何在 MATLAB 中调用短路逻辑运算符作为函数?

matlab - 在 Matlab 中,为什么 cellfun(@size, x) 不需要非标量值的 UniformOutput False?

C++ 生成的代码(来自 MATLAB)