如何在命令行运行Matlab脚本后退出?

3

这是我的Python代码

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "'\""
os.system(DosCmd)
curve_file = open('curve/'+str(index)+'.curve','r') 

我在python脚本中运行了一个.m文件,它可以正常工作,但在执行完.m文件后,它卡在os.system(DosCmd)。 为了使python运行以下代码,我必须关闭此窗口:

enter image description here

由于这部分代码在循环中,这真的让我很困扰。我在网上发现有人说matlab可以在执行完.m文件后自动退出,但我的就是不会。会有人告诉我我做错了什么或者该怎么做吗?谢谢!


尝试使用中断键 CTRL+C - Guy P
1
你尝试过使用 exit 吗? - fpe
2个回答

5

在执行的MATLAB代码中添加一个 exit 调用。

DosCmd = 'matlab -wait -automation -nosplash -r "run \'' + to_run + "', exit\""

你引用的格式看起来有些奇怪,但只需要在传递-r参数的命令的末尾添加, exit即可。
顺便说一下,使用subprocess会更容易,因为它可以帮你进行引用。
subprocess.check_call(['matlab', '-wait', '-automation', '-nosplash', 
    '-r', 'run \' + to_run + \', exit'])

谢谢,它有效!还有一个问题,我能否“重复使用”Matlab而不是一遍又一遍地启动它? - laike9m
好的,我认为JonB已经解释得很清楚了。mlabwrap 对我来说看起来不错。你可以将MATLAB用作COM服务器,但我认为使用 mlabwrap 会更加干净。 - David Heffernan

2
将命令exit添加到脚本的最后一行。 命令行参数-switch的-wait表示启动器应用程序不会关闭,直到matlab退出。如果您实际上是让python处理ML输出内容,则-wait是正确的,否则请删除-wait。 此外,您确定在循环中每次都要启动新的matlab会话吗?Matlab提供了DDE功能,可以打开一个实例并发送命令。 或者,您可以查看PyMat、mlabwrap等现有的python与matlab桥接库。

谢谢!我需要“等待”,因为机器学习输出是我接下来要处理的内容。 - laike9m
看起来 PyMat 和 mlabwrap 已经好几年没有更新了...但是我正在使用 Python3... - laike9m
2
@laike9m:使用COM接口:https://dev59.com/QXE85IYBdhLWcg3wNw14#2885122(确保您至少在运行“matlab-regserver”一次之前) - Amro
@laike9m:只需从MATLAB外部的控制台运行matlab.exe -regserver即可。它会将MATLAB注册为COM服务器。如果您尚未这样做,您只需要执行一次即可。 - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接