我需要一种在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命令可以解决问题。但事实并非如此。我认为Matlab会在我启动while循环时编译可以在运行时调用的所有函数。从那时起,我无法在不重新启动while循环的情况下更改任何内容。 (我可以更改它,但Matlab会忽略所有更改)。
有解决这个问题的方法吗?我认为有一种在命令窗口内执行命令的方法,就像用户键入它一样。但我不记得了。
答案 0 :(得分:1)
Amro与rehash
的解决方案完美无缺。 Matlab检测m文件中的变化,即使它已经在运行脚本!
答案 1 :(得分: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会话。