Shihab Khan
Shihab Khan

Reputation: 201

How to run a user input MATLAB function in Python

Based on the example given in the documentation, we can call a MATLAB file triarea.m from a python script as follows:

import matlab.engine
eng = matlab.engine.start_matlab()
eng.triarea(nargout=0)

What if, we had a variable in Python with the MATLAB filename input by the user, file_name = 'triarea' then,

eng.file_name(nargout=0)

returns the error

MatlabExecutionError: Undefined function 'file_name' for input arguments of type 'double'.

How can we run the user input MATLAB function in Python?

In my actual problem, the file_name is input while instantiating an object of a class and is stored as an object attribute. Then one of the methods of the object calls this MATLAB file.

Upvotes: 1

Views: 949

Answers (2)

Finn
Finn

Reputation: 2343

You can use the builtin function gettatr like here:

import matlab.engine
eng = matlab.engine.start_matlab()

file_name = 'triarea'
dynamic_func = getattr(eng, file_name)
dynamic_func(nargout=0)

Upvotes: 2

Paolo
Paolo

Reputation: 26074

You can combine Python's f strings and eval.

An example which uses the function name, in this case plot directly:

eng.plot(eng.magic(4))

An example which evaluates the variable name as the function name:

file_name = 'plot'
eval(f'eng.{file_name}(eng.magic(4))')

Upvotes: 1

Related Questions