仮定;
次の場所にmファイルがあります。C:\M1\M2\M3\mfile.m
そして、matlabのexeファイルは次の場所にあります。C:\E1\E2\E3\matlab.exe
このmファイルをMatlabで、たとえば.batファイル内でコマンドラインから実行したいと思います。どうすればこれを行うことができますか、それを行う方法はありますか?
次のようなコマンドは、mファイルを正常に実行します。
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"
前の回答で言及されていなかった重要な点の1つは、明示的に示されていない場合、matlabインタープリターは開いたままになるということです。したがって、@ hkBattousaiの答えにexit
コマンドを追加します。
"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"
スクリプトのエラーを適切に処理するために、代わりに使用するものを次に示します。
C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch, exit, end, exit"
より詳細にしたい場合:
C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "try, run('C:\<a long path here>\mfile.m'), catch me, fprintf('%s / %s\n',me.identifier,me.message), end, exit"
元の参照を見つけました こちら 。
Linuxでも同じことができ、実際には次のようなカスタムエラーコードをシェルに送り返すことができます。
#!/bin/bash
matlab -nodisplay -nojvm -nosplash -nodesktop -r \
"try, run('/foo/bar/my_script.m'), catch, exit(1), end, exit(0);"
echo "matlab exit code: $?"
スクリプトが例外をスローする場合はmatlab exit code: 1
、そうでない場合はmatlab exit code: 0
を出力します。
手順は次のとおりです。
cd C:\M1\M2\M3
で.mファイルを含むフォルダーを入力しますC:\E1\E2\E3\matlab.exe -r mfile
Windowsシステムは、.mファイルを検索するためのMATLABの場所としてcurrent folderを使用し、-r
オプションは、起動が発生するとすぐに、指定された.mファイルを開始しようとします。
cat 1.m | matlab -nodesktop -nosplash
そして、私はUbuntuを使用します
Malatに感謝します。あなたの コメント 助けてくれました。しかし、エラーメッセージ全体を返し、それをmatlabコンソールに出力するMExeption
メソッドgetReport()
を見つけたので、try-catchブロックを追加します。
さらに、このコンパイルはmatlabを呼び出すバッチスクリプトの一部であるため、ファイル名を出力しました。
try
some_code
...
catch message
display(['ERROR in file: ' message.stack.file])
display(['ERROR: ' getReport(message)])
end;
レガシーコード生成メソッドに渡された誤ったモデル名の場合、出力は次のようになります。
ERROR in file: C:\..\..\..
ERROR: Undefined function or variable 'modelname'.
Error in sub-m-file (line 63)
legacy_code( 'slblock_generate', specs, modelname);
Error in m-file (line 11)
sub-m-file
Error in run (line 63)
evalin('caller', [script ';']);
最後に、windowsコマンドプロンプトウィンドウで出力を表示するには、-logfile logfile.txt
(さらに-wait
を使用)でファイルにmatlabコンソールを記録し、バッチコマンドtype logfile.txt
を呼び出します。