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

12 vues (au cours des 30 derniers jours)
金太郎 細野
金太郎 細野 le 25 Mar 2022
Commenté : Kojiro Saito le 25 Mar 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スクリプトを呼び出して実行することは可能でしょうか?

Réponse acceptée

Kojiro Saito
Kojiro Saito le 25 Mar 2022
Modifié(e) : Kojiro Saito le 25 Mar 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 commentaires
金太郎 細野
金太郎 細野 le 25 Mar 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 le 25 Mar 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')

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Python からの MATLAB の呼び出し dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!