python - 如何在 Python 3.9 中调用 MATLAB 脚本?

标签 python python-3.x matlab python-3.9

我有一个 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/

相关文章:

matlab - 如何在 RGB 空间中表示来自 PCA 空间的点

python - 为什么 astype timedelta64 不能在 ndarray 上工作?

python - 正确地将变量传递给函数

python - 从哪里获得 boost/python.hpp?

python - 将关键字值添加到下一行,直到找到下一个关键字 - Python

python - Pygame 蛇吃自己

matlab - 寻找矩阵子矩阵组合的最有效方法[matlab]

r - 如何在 R 或 MATLAB 中为散点图创建带阴影的误差条 "box"

python - PySide:将 QItemSelectionModel 与 QListView 一起使用时出现段错误(?)

python - pandas 行的特征值