gpt4 book ai didi

python - 从 Matlab 优雅地返回到 python

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:42 24 4
gpt4 key购买 nike

我将 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 , exit'

Matlab 代码完成其工作,然后使用以下结构打印错误并停止执行:

if(mse> thr)
error('mse has increased');
end

但是,控制权并没有交还给 python。

我在 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

如果我在 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 显示为 ""errNONE ,并且 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 处退出,但应完成所有迭代)

有什么想法吗?
塞迪

最佳答案

尝试使用subprocess.check_output(*popenargs, **kwargs)。您可以捕获任何给定命令的输出。检查 here 中的 Python 2.7 子进程文档

import subprocess
msg = subprocess.check_output([MatlabExePth, "-nosplash", "-wait", "-logfile", "FileIoReg_MatlabRemoteRun.log", "-minimize", "-r", fname, ", exit"])
print msg

关于python - 从 Matlab 优雅地返回到 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com