【问题标题】:matlab engine has no attribute 'shareEngine'matlab 引擎没有属性“shareEngine”
【发布时间】: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.shareEngine from 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 连接到它。它有一个非常具体的用例。你的用例是什么?为什么需要共享会话? (我问是因为它有助于形成一个有用的答案,而不是“不要那样做”)。

标签: python matlab


【解决方案1】:

首先您必须在 MATLAB 会话中调用 matlab.engine.shareEngine 并且不要在 Python 中使用matlab.engine.shareEngine('Engine_1')

import matlab.engine
eng = matlab.engine.start_matlab()

names = matlab.engine.find_matlab()
print(names)
eng.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多