web-dev-qa-db-ja.com

Matlab:コマンドラインからm-ファイルを実行する

仮定;

次の場所にmファイルがあります。
C:\M1\M2\M3\mfile.m

そして、matlabのexeファイルは次の場所にあります。
C:\E1\E2\E3\matlab.exe

このmファイルをMatlabで、たとえば.batファイル内でコマンドラインから実行したいと思います。どうすればこれを行うことができますか、それを行う方法はありますか?

94
hkBattousai

次のようなコマンドは、mファイルを正常に実行します。

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');"

95
hkBattousai

前の回答で言及されていなかった重要な点の1つは、明示的に示されていない場合、matlabインタープリターは開いたままになるということです。したがって、@ hkBattousaiの答えにexitコマンドを追加します。

"C:\<a long path here>\matlab.exe" -nodisplay -nosplash -nodesktop -r "run('C:\<a long path here>\mfile.m');exit;"

67
elachell

スクリプトのエラーを適切に処理するために、代わりに使用するものを次に示します。

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"

元の参照を見つけました こちら

40
malat

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を出力します。

25
slux83

手順は次のとおりです。

  1. コマンドラインを起動します。
  2. cd C:\M1\M2\M3で.mファイルを含むフォルダーを入力します
  3. 次を実行します:C:\E1\E2\E3\matlab.exe -r mfile

Windowsシステムは、.mファイルを検索するためのMATLABの場所としてcurrent folderを使用し、-rオプションは、起動が発生するとすぐに、指定された.mファイルを開始しようとします。

13
aardvarkk
cat 1.m | matlab -nodesktop -nosplash

そして、私はUbuntuを使用します

10
Jia Ruipeng

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を呼び出します。

7
CanO