如何在通过subprocess.Popen执行Matlab例程时将值从Matlab返回到Python

如何在通过subprocess.Popen执行Matlab例程时将值从Matlab返回到Python,python,matlab,Python,Matlab,我可以使用Python调用参数并将其传递给Matlab,如下所示: MatlabExePth=checkMatlabExe() matlab_cmd_string = MatlabExePth+ " -nosplash -nodesktop -wait -r " changeDirectory("C:\\SVN\\Matlabcode") mat_cmd = matlab_cmd_string + "\"" + 'testMatlabReturnToPython'

我可以使用Python调用参数并将其传递给Matlab,如下所示:

    MatlabExePth=checkMatlabExe()
    matlab_cmd_string = MatlabExePth+ " -nosplash -nodesktop -wait -r "
    changeDirectory("C:\\SVN\\Matlabcode")
    mat_cmd = matlab_cmd_string + "\"" + 'testMatlabReturnToPython' +  ", exit\""
    # test return value Method 1
    msg=subprocess.check_output(mat_cmd,stderr=subprocess.STDOUT,shell=True)
    # test return value method 2
     proc = subprocess.Popen(cmd_string, stdout=subprocess.PIPE, shell=True)
     out, err = proc.communicate()
其中testMatlabReturnToPython.m代码如下所示:

    function [err,err_cod] = testMatlabReturnToPython()
      try

        mse=0.01;
        thr=0.1;
        if(mse>thr)
            err = 'no error'
            err_cod = 0;
        else
            % cause an exception
            [1 2]*[1 2];
        end
     catch
         err = ' error'
         err_cod = -1;
     end
与Python代码一样,我需要一种方法将errerr_代码变量返回到Python中(可以是数组、单元格变量等),但我还没有找到这样做的方法


注意:调用Matlab支持后,发现
导入Matlab.engine
将执行上述操作,但可以从Matlab R2014b获得,而我有R2013b。

下面的小示例如何使用
try catch

function [my_out, status] = myfun(my_inputs)
  try
    do_your_work_here;
    my_out = your_result;
    status = 1;
  catch ME
    my_out = [];
    status = -1;
    warning(ME.getReport());
  end
end

更新:关于您更新的问题,要从python中的matlab函数中获取值,您可能需要类似于python中的以下内容:

import matlab.engine as ME
PE = ME.start_matlab()
err,err_cod = PE.testMatlabReturnToPython(nargout=2)

很抱歉,我现在没有python,因此无法确认它是否运行良好。

我想您需要进一步解释您正在做什么?通过命令行调用Matlab?还是通过其他API?@Daniel从Python调用Matlab。这与:[link]您使用命令行而不是Matlab automation的具体原因有关,您可以通过python中的win32com.client访问它?有关possibilities@Daniel谢谢Daniel,这是一个很好的资源。您想从python调用matlab函数吗?还是我误解了?是的,我能够调用和传递参数,但无法读取更新后的答案,您可以参考以获取更多信息,然后您应该更新这些信息,在您的问题标题中清楚地提及您没有的许可证,希望其他人能提供帮助