Использование пользовательской функции Matlab в Python дает ошибку

У меня есть пользовательская функция Matlab. Это написано кем-то другим. В этом файле есть несколько функций, но я пытаюсь вызвать первую функцию, имя которой совпадает с именем файла .m. Он получает 4 аргумента (строка, строка, строка, логическое значение). Обычно в Matlab я называю это так: function ('string', 'string, true) При попытке в Python я использую следующий код.

def CodeGenerationAndResim(self, Models=None, Resim=False, Type='TW'):
    """ This function will start Matlab and generates code for each Simulink model
        and creates Resim archives for the release.
        All variables:
            Models                      - All Sim Modelto generate c code for
            Resim                       - Running Resim function
            Type                        - Type of Resim archive
            matlabEngine                - Matlab engine to start Matlab
            MatlabEngineSuccessfull     - Checks if Matlab engine is started without error
            CodeGenSuccessfull          - Checks if Code Generation is successsful
            ResimSuccessfull            - Checks if Resim function is performed successfully.
    """


    # Check variables
    MatlabEngineSuccessfull = True
    CodeGenSuccessfull = True
    ResimSuccessfull = True


    # Call Matlab engine
    try:
        matlabEngine = matlab.engine.start_matlab('-nodesktop', background = False)
        matlabEngine.addpath("C:\\temp")
    except EngineError as e:
        MatlabEngineSuccessfull = False
        Print("Could not start Matlab. Do you have Matlab 64 bits installed?")

    # Generate code for models in a loop
    if Models is not None and MatlabEngineSuccessfull:
        for model in Models:
            try:
                matlabEngine.rtwbuild(model)
            except Exception as e:
                CodeGenSuccessfull = False
                print('Something went wrong')

    # Running Resim
    if Resim and MatlabEngineSuccessfull and CodeGenSuccessfull:
        try:
            matlabEngine.resimPrepareNewVersion('all','DAS2_TwYYWW_2005',1)
        except Exception as e:
            ResimSuccessfull = False
            print(e)


    return MatlabEngineSuccessfull, CodeGenSuccessfull, ResimSuccessfull

Я получаю следующую ошибку:

Error using resimPrepareNewVersion
Too many output arguments.
Too many output arguments.

Я не понимаю ошибки. Я уже привожу те же аргументы, что и в Matlab. Даже когда я даю ему 3, 2 или без аргументов, я получаю ту же ошибку. Когда Matlab загружает, эти функции загружаются автоматически, поэтому мне не нужно добавлять путь, но я все равно сделал это. Однако я пытался, не указывая пути. Генерация кода и запуск Matlab проходят без проблем. В Matlab эта функция загружает некоторые другие файлы и открывает информационный диалог, в котором это что угодно.


person Payam30    schedule 03.04.2020    source источник


Ответы (1)


Было действительно странно, что я все время красил ошибку как Too many input arguments вместо output arguments

Решил проблему вставив nargout=0.

Отредактировано:

matlabEngine.resimPrepareNewVersion('all','DAS2_TwYYWW_2005',1)

To :

matlabEngine.resimPrepareNewVersion('all','DAS2_TwYYWW_2005',1, nargout=0)

И это сработало очень хорошо. Спасибо.

person Payam30    schedule 04.04.2020