Matlab:通过脚本模拟命令窗口输入

时间:2013-05-27 20:14:42

标签: matlab command execute

我需要一种在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会忽略所有更改)。

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

2 个答案:

答案 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会话。