使用win32com Dispatch启动Matlab后,应用程序自动关闭

2 投票
2 回答
1351 浏览
提问于 2025-04-18 02:58

我想从Python启动Matlab,然后执行一个非常简单的测试。

def execute_matlab_command(command):
    handle = win32com.client.DispatchEx('matlab.application')
    handle.visible = True
    # By using print I know that the handle is valid here
    handle.Execute(command)

execute_matlab_handle("x=32")

代码运行得很好,但在调用handle.Execute(command)之前,Matlab就关闭了。我是不是漏掉了什么,比如一个open()之类的?我看到其他人用(几乎)相同的代码说可以正常工作,但我就是搞不懂这个问题。

编辑:Matlab版本是r2012b,Python版本是2.7

编辑2:我可能找到了Matlab关闭的原因。我是在一个用wxPython构建的GUI中调用DispatchEx,而这个GUI包含一个主循环。我尝试了一个没有GUI的简单脚本,一切都正常。所以我把这个问题留在这里,如果有人遇到同样的问题或者找到了解决方案。

2 个回答

0

使用 Dispatch

def execute_matlab_command(command):
    handle = win32com.client.Dispatch('matlab.application')
    handle.visible = True
    # By using print I know that the handle is valid here
    handle.Execute(command)

我之前没用过 DispatchEx,但我可以保证 Dispatch 是可以用的。

1

这个QA提到,从Python调用MATLAB函数应该没有问题。这个MATLAB页面建议你可能需要对你的MATLAB安装进行一些配置,以便能够以这种方式打开它。

注意:'matlab.application'是一个COM服务器对象,它和你发现的MATLAB包装器可能没有关系;这个包装器只是一个可执行文件。MATLAB的某个库已经被注册为matlab.application的COM服务器。

撰写回答