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

アムロのソリューションは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 に答える