如何在通过subprocess.Popen执行Matlab例程时将值从Matlab返回到Python
我可以使用Python调用参数并将其传递给Matlab,如下所示:如何在通过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'
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代码一样,我需要一种方法将err和err_代码变量返回到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函数吗?还是我误解了?是的,我能够调用和传递参数,但无法读取更新后的答案,您可以参考以获取更多信息,然后您应该更新这些信息,在您的问题标题中清楚地提及您没有的许可证,希望其他人能提供帮助