我将python中的Matlab代码称为
matlab_cmd_string = MatlabExePth+ " -nosplash -nodesktop -wait -logfile FileIoReg_MatlabRemoteRun.log -minimize -r "
fname = 'CompareMse '
mat_cmd = matlab_cmd_string + fname + ", exit\""
被翻译为
'C:\ Program Files \ MATLAB \ R2013b \ bin \ matlab.exe -nosplash -nodesktop -wait -logfile FileIoReg_MatlabRemoteRun.log -minimize -r CompareMse,退出'
Matlab代码完成其工作,然后使用以下构造打印错误并停止执行:
if(mse> thr)
error('mse has increased');
end
但是,控件不会返回给python。
我在python中尝试了以下命令:
msg=subprocess.check_output(mat_cmd,stderr=subprocess.STDOUT,shell=False)
msg显示为空,控制台窗口不显示任何内容,因为控件未返回。与以下方法相同:
proc = subprocess.Popen(mat_cmd , stdout=subprocess.PIPE, shell=True)
out, err = proc.communicate()
output = out.upper()
proc.returncode
如果我在matlab中写下以下内容,
if(mse> thr)
warning('mse has increased');
return
end
我通过以下方式控制回python:
msg=subprocess.check_output(mat_cmd,stderr=subprocess.STDOUT,shell=False)
proc = subprocess.Popen(mat_cmd , stdout=subprocess.PIPE, shell=True)
out, err = proc.communicate()
output = out.upper()
proc.returncode
msg,out 显示为“”,错误 无, proc.returncode 0
需要的是Matlab中的功能:
for i=1:3
% Some code here
if(mse> thr)
[print error,return user defined exit code and error message back to python variable]
if (mse_new >mse_old)
[print warning,do not return, but capture warning back to
Python variable]
% some code here
警告的难点在于,如果警告的条件发生在循环迭代1中,而不是第二次和第三次,Python应该能够理解Matlab代码没有错误,只有一个警告,应该捕获它。(并且matlab不应该在for循环的迭代1处退出但是完成所有迭代)
任何想法?
sedy
答案 0 :(得分:1)
尝试使用import subprocess
msg = subprocess.check_output([MatlabExePth, "-nosplash", "-wait", "-logfile", "FileIoReg_MatlabRemoteRun.log", "-minimize", "-r", fname, ", exit"])
print msg
。您可以捕获任何给定命令的输出。检查tutorial
.animate()