2

我需要一种在 matlab 中从另一个脚本中执行脚本的方法。棘手的部分是,第一个脚本是一个 while 循环,它每 60 秒轮询一次新作业。如果找到工作(由我创建),则应调用 main.m 文件。现在,问题是我希望能够在 while 循环已经运行时修改 main.m 和所有其他函数。循环看起来像这样:

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

我认为 eval 命令可以解决问题。但事实并非如此。我认为一旦我开始我的 while 循环,Matlab 就会编译所有可以在运行时调用的函数。从那时起,如果不重新启动 while 循环,我将无法更改任何内容。(我可以更改它,但 Matlab 会忽略所有更改)。

有没有办法解决这个问题?我认为在命令窗口内有一种执行命令的方法,就像用户键入它一样。但我想不起来了。

4

2 回答 2

1

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

于 2013-05-27T21:03:19.140 回答
0

我认为你可以用一个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 会话。

于 2013-05-27T20:58:02.453 回答