我有一个 MATLAB .m 文件,并且希望 Python.py 文件能够运行/调用该 .m 文件,但是 Python 3.9 似乎不支持使用“import matlab.engine”调用 MATLAB 文件(我正在运行什么)并在 3.7 之后被删除
我的问题是在 Python 3.9 中调用 MATLAB 脚本的正确约定是什么?
编辑:当我说“调用 MATLAB 脚本”时,我的意思是单独运行该脚本。使用 .py 文件打开 MATLAB 窗口有点违背了该项目的目的。
最佳答案
这个答案适用于 Python 3.6,但它也应该适用于 3.9。在 Linux 计算机(和 MacOS,可能稍作修改)上,您可以执行系统命令来打开 MATLAB、运行脚本,然后关闭 MATLAB,
import subprocess
run_matlab = 'matlab -nodisplay -nojvm -nosplash -nodesktop -r "try, test_script, catch e, disp(getReport(e)), exit(1), end, exit(0);"'
subprocess.run(run_matlab, shell=True, check=True)
try-catch
block 的用途是在执行脚本 test_script
后正确退出 MATLAB,以防脚本引发异常 - 引发错误。人们可以直接退出(exit
或 MATLAB 中的 quit
在这两个操作系统上默认返回正确的退出代码),但使用 try-catch
block 有更多机会当异常发生时修复、通知或保存事情。在交互式 session 之外运行时,这通常很有用。
命令的其余部分打开 MATLAB,不显示任何类型,运行脚本 test_script
,然后退出 MATLAB - exit(1)
表示引发了异常,和 exit(0)
表示一切顺利。
如果没有try-catch
,命令会简单得多,
run_matlab = 'matlab -nodisplay -nojvm -nosplash -nodesktop -r "test_script; exit;"'
在 Python 方面,我使用 subprocess.run()
(或 .call()
),因为它较新,并且 recommended 。选项shell
表示该命令将通过shell执行。 check
表示如果 run_matlab
进程(命令)抛出错误,Python 脚本也会抛出错误。默认值为 False
,与 try-catch
block 一起可用于快速忽略崩溃代码。
正如 @CrisLuengo 在评论中所说,从 MATLAB 2019a 开始(MATLAB 2018b确实没有)不需要上面详细的命令。您所需要的只是
run_matlab = 'matlab -batch test_script.m'
查看文档,-batch
调用所有必要的选项,等等。
关于python - 如何在 Python 3.9 中调用 MATLAB 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65099466/