pythonから指定フォルダに存在するMATLABスクリプトを呼び出したい
조회 수: 30 (최근 30일)
이전 댓글 표시
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スクリプトを呼び出して実行することは可能でしょうか?
댓글 수: 0
채택된 답변
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
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 Exchange에서 Python からの MATLAB の呼び出し에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!