pythonから指定​フォルダに存在するM​ATLABスクリプト​を呼び出したい

30 ビュー (過去 30 日間)
金太郎 細野
金太郎 細野 2022 年 3 月 25 日
コメント済み: Kojiro Saito 2022 年 3 月 25 日
pythonプログラムからMatlabエンジンAPIを用いて、Matlabスクリプト(mファイル)の実行を行う際、以下URLにあるように
import matlab.engine
eng = matlab.engine.start_matlab()
eng.triarea(nargout=0)
として呼び出すことで、triarea.m ファイルが実行出来ると思います。
この時、pythonプログラムのpyファイルと同階層(同フォルダ)にmファイルが存在しないと、'triarea'が認識されません。
pyファイルと同階層ではない、指定フォルダに存在するMatlabスクリプトを呼び出して実行することは可能でしょうか?

採用された回答

Kojiro Saito
Kojiro Saito 2022 年 3 月 25 日
編集済み: Kojiro Saito 2022 年 3 月 25 日
addpathするか、起動時のオプション「-sd」を付けるかの方法があります。
triarea.mが C:\Code フォルダにあるとします。
(1) addpathする方法
import matlab.engine
eng = matlab.engine.start_matlab()
eng.addpath('C:\Code')
eng.triarea(nargout=0)
(2) 起動時のオプション「-sd」を付ける方法
import matlab.engine
eng = matlab.engine.start_matlab('-sd "C:\Code"')
eng.triarea(nargout=0)
start_matlabにはMATLABのWindowsでの起動オプションLinuxの起動オプションmacOSの起動オプションを渡せるので、共通で使える「-sdオプション」で現在のフォルダを指定する方法です。
(1)のほうが手軽ですし、複数のフォルダを追加できるので良いと思います。
  2 件のコメント
金太郎 細野
金太郎 細野 2022 年 3 月 25 日
ありがとうございます。動作確認できました。
今回で言う、"triarea"のmファイル名が可変する場合、ファイル名を変数で指定するなどして実行することは可能ですか?
import matlab.engine
def MatlabAnalysis(fileName):
eng = matlab.engine.start_matlab()
eng.addpath('C:\Code')
eng.fileName(nargout=0)
↑のプログラムでは、"fileName"をスクリプト(ファイル)名とされてしまうため認識されず実行不可です。
C:\Code 内に、事前にファイル名が不明なmファイルが投函されそのmファイルを使用して解析を実行することを想定しています。
Kojiro Saito
Kojiro Saito 2022 年 3 月 25 日
eval関数を使ってスクリプトのファイル名を動的に渡せます。
import matlab.engine
def MatlabAnalysis(fileName):
eng = matlab.engine.start_matlab()
eng.addpath('C:\Code')
eng.eval(fileName, nargout=0)
MatlabAnalysis('triarea')
入力引数を渡す場合はeval('triarea(1.0, 5.0)')のように括弧で渡す必要があるので、以下のようにcommand_to_execの文字列をfileNameと結合してからevalを実行します。
import matlab.engine
def MatlabAnalysis(fileName):
eng = matlab.engine.start_matlab()
eng.addpath('C:\Code')
command_to_exec = fileName + '(1.0, 5.0)'
out = eng.eval(command_to_exec, nargout=1)
print(out)
MatlabAnalysis('triarea')

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePython からの MATLAB の呼び出し についてさらに検索

タグ

製品


リリース

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!