Matlab:仿真命令窗口输入的脚本



我需要一种从另一个脚本内执行matlab脚本的方法。棘手的部分是,第一个脚本是一个while循环,它每60秒轮询一次新任务。如果找到一份工作(由我创造),主要。M文件应该被调用。现在的问题是我想修改main函数。M和所有其他函数,而while循环已经在运行。循环看起来像这样:

while run
   - pause 60 seconds 
   - get jobs form text file on network drive
   - run main(jobID)
   - save result on network drive
end

我认为eval命令可以解决这个问题。但事实并非如此。我认为Matlab编译所有可以在运行时调用的函数,只要我开始我的while循环。从那时起,我不能改变任何东西没有重新启动while循环。(我可以改变它,但Matlab忽略所有的变化)。

有办法解决这个问题吗?我认为在命令窗口中有一种执行命令的方法,就像用户键入命令一样。但是我不记得了。

Amro的rehash解决方案工作完美。Matlab检测m文件中的变化,即使它已经运行脚本!

我认为你可以用timer对象做你想做的事情。

首先创建一个main。定义和初始化计时器的M函数:

function main
% Create timer that calls the sub-function checkmfiles every 60 seconds
t = timer('TimerFcn', @checkmfiles, 'Period', 60, 'ExecutionMode', 'fixedRate');
start(t);
function checkmfiles(obj,events)
% Just a dummy function, you'll need to expand it to fit your needs
if exist(f1) == 2
    disp('''f1.m'' found.');
    eval('f1');
else
    disp('No file found.');
end

上面的例子假设f1.m一开始不存在。您可以运行main.m,然后创建一个任意的f1.m(示例假设该函数不接受输入),它将由计时器回调运行。此方法还有一个额外的好处,即当计时器运行时,它不会占用您的Matlab会话。

最新更新