【发布时间】:2019-02-21 14:05:38
【问题描述】:
今天我尝试从 python 脚本运行 matlab 引擎。 我使用此站点的官方说明逐步安装了 Matlab API for python: https://www.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html
但是当我尝试使用方法 shareEngine('Engine_name') 将我的 matlab 引擎实例作为共享实例时(参见代码):
import matlab.engine
eng = matlab.engine.start_matlab()
matlab.engine.shareEngine('Engine_1')
names = matlab.engine.find_matlab()
print(names)
eng.quit()
然后我从控制台输出收到错误:
C:\Users\rpawlak\Google Drive\python_radio>python matlab_python.py
Traceback (most recent call last):
File "matlab_python.py", line 4, in <module>
matlab.engine.shareEngine('Engine_1')
AttributeError: module 'matlab.engine' has no attribute 'shareEngine'
我不明白为什么会收到此错误,我按照 matlab 网站的官方 adi 文档格式进行操作: https://www.mathworks.com/help/matlab/matlab_external/connect-python-to-running-matlab-session.html
文档是否已过时或我的 matlab 版本已过时? 我的matlab是:R2018a 9.4.0
问候, 罗伯特
【问题讨论】:
-
从第二个链接它说你需要调用
matlab.engine.shareEnginefrom matlab -
是的,你是对的。您是否知道如何将 matlab 引擎作为 backgorund 进程运行?当我尝试执行时: matlab -nodisplay -nosplash -nodesktop -automation -r "run("matlab.engine.shareEngine");"然后我收到 matlab 控制台窗口,但关闭此窗口也提供关闭 matlab backgorund 过程。你知道如何解决这个问题吗?
-
因为从这个指令我可以假设没有可能从 python 级别创建引擎的共享实例。
-
您的 MATLAB 版本比您正在阅读的文档旧。每年有两个 MATLAB 版本,因此您比您正在阅读的文档落后 7 个版本。要么升级,要么阅读您的 MATLAB 版本附带的文档。
-
也就是说,
matlab.engine.shareEngine是在 MATLAB R2015b 中引入的,因此您应该可以访问它。 DavidG 是对的,您必须先在 MATLAB 会话中运行该命令,然后才能从 Python 连接到它。它有一个非常具体的用例。你的用例是什么?为什么需要共享会话? (我问是因为它有助于形成一个有用的答案,而不是“不要那样做”)。