Запуск файла .m с аргументами с использованием mlab из python

Я установил mlab для запуска нескольких скриптов .m из python.

Я протестировал код из этого ответа, и он работает очень хорошо. Однако моя проблема начинается, когда я пытаюсь запустить скрипт с помощью команды запуска.

Вот все, что я пробовал.

foo.м

function sum = foo(a,b) 
    sum= a+b;
    fprintf ('sum', sum); 

test.py

from mlab.releases import latest_release as matlab
sum= matlab.run('foo.m',5,6)
print sum

Это дает ошибку

sum=matlab.run('foo.m',5,6)
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4 
py2.7.egg\mlab\mlabwrap.py", line 607, in mlab_command
    return self._do(name, *args, **update({'nout':nout}, kwargs))
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 542, in _do
    handle_out(mlabraw.eval(self._session, cmd))
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabraw.py", line 67, in eval
    matlab.eval(exp)
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\matlabcom.py", line 89, in eval
    raise MatlabError(ret[begin:])
mlab.matlabcom.MatlabError: Error using run
Too many input arguments.

Затем я попытался передать аргументы в виде словаря как здесь.

function sum = foo(args) 
    a= args.a
    b= args.b
    sum= a+b;
    fprintf ('sum', sum); 

В питоне,

sum=matlab.run('foo.m',{'a':5,'b':6})
print sum

в результате ошибка,

  sum=matlab.run('foo.m',{'a':5,'b':6})
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 607, in mlab_command
    return self._do(name, *args, **update({'nout':nout}, kwargs))
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 534, in _do
    mlabraw.put(self._session,  argnames[-1], arg)
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabraw.py", line 76, in put
    matlab.put({var_name : val})
  File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\matlabcom.py", line 128, in put
   self.client.PutWorkspaceData(name, 'base', val)
  File "<COMObject matlab.application>", line 3, in PutWorkspaceData
TypeError: Objects of type 'dict' can not be converted to a COM VARIANT

После того, как мне совсем надоело, я решил запустить простой файл без каких-либо функций и аргументов.

foo.м

clear all;
fprintf('This is python calling matlab');

test.py

matlab.run('foo.m')

Это не дает мне ошибки, но я также не вижу ничего напечатанного.

Я не знаю, как действовать сейчас. Я попытался установить mlabwrap, как это предлагается в некоторых ответах, но сама установка не работает в Windows. Поскольку mlab был просто перепакованной версией, я думал, что она будет работать гладко. Я тщательно изучил все вопросы здесь, и ничего не помогло мне.

Итак, как запустить файл .m с помощью mlab? С аргументами еще лучше.


person gaya    schedule 06.09.2017    source источник
comment
Почему вы используете matlab.run, а не matlab.foo? matlab.run собирается выполнить run, который принимает только один входной аргумент. Также прошли годы с момента последнего обновления mlab, возможно, вам следует указать Собственный Python-мост MATLAB попробуйте.   -  person excaza    schedule 06.09.2017
comment
Я попробовал matlab.foo сейчас, снова нет результата. И ошибки тоже нет. Что касается моста Python, у меня нет прав администратора, и для установки чего-либо мне нужно связаться с ИТ и так далее, что, к сожалению, сейчас невозможно.   -  person gaya    schedule 06.09.2017
comment
Кроме того, никогда не используйте имена встроенных функций в качестве имен переменных (на любом языке). В этом случае не используйте sum в качестве переменной в MATLAB. Скорее всего, это не ваша реальная проблема, но она может привести к тому, что вы запутаетесь сами и/или ваш компилятор!   -  person Wolfie    schedule 06.09.2017
comment
@Wolfie отметил :)   -  person gaya    schedule 06.09.2017