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

11 Ansichten (letzte 30 Tage)
金太郎 細野
金太郎 細野 am 25 Mär. 2022
Kommentiert: Kojiro Saito am 25 Mär. 2022
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スクリプトを呼び出して実行することは可能でしょうか?

Akzeptierte Antwort

Kojiro Saito
Kojiro Saito am 25 Mär. 2022
Bearbeitet: Kojiro Saito am 25 Mär. 2022
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 Kommentare
金太郎 細野
金太郎 細野 am 25 Mär. 2022
ありがとうございます。動作確認できました。
今回で言う、"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 am 25 Mär. 2022
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')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Python からの MATLAB の呼び出し finden Sie in Help Center und File Exchange

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!