2013-04-26 151 views
3

这里是我的Python代码如何从命令行运行matlab脚本后退出?

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文件后自动退出,但我的不会。有人会告诉我做错了什么,或者我应该怎么做?Thx!

+0

尝试打破关键'CTRL + C' – Guy 2013-04-26 10:51:57

+1

你试过'退出'? – fpe 2013-04-26 10:53:02

回答

4

将一个调用exit添加到您执行的MATLAB代码中。

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

你的报价看起来有点靠不住提醒你,但你只需要添加, exit到您在-r参数传递命令的结束。

顺便说一下,使用subprocess这样会容易很多,因此您可以让subprocess为您做引用。

subprocess.check_call(['matlab', '-wait', '-automation', '-nosplash', 
    '-r', 'run \' + to_run + \', exit']) 
+0

Thx,它的工作原理!另一个问题,有没有一种方法,我可以“重用”matlab而不是一次又一次地启动它? – laike9m 2013-04-26 11:25:11

+0

好吧,JonB覆盖了我的想法。 'mlabwrap'对我来说看起来不错。你可以使用MATLAB作为COM服务器,但我怀疑'mlabwrap'会更干净。 – 2013-04-26 11:32:31

2

将命令exit添加到脚本的最后一行。
-wait命令行开关意味着在MATLAB退出之前,启动器应用程序不会关闭。如果你正在用python做一些ML输出的话,那么等待是正确的,否则就不要去等待。

另外,你确定你真的想每次在循环中启动新的matlab会话吗? Matlab公开了DDE功能,这将允许您打开一个实例并发送命令。或者,你可能会看PyMat或mlabwrap等等,现有的Python到matlab桥接库之一。

+0

谢谢!我需要“等待”,因为ML输出是我接下来要处理的内容。 – laike9m 2013-04-26 11:27:06

+0

PyMat和mlabwrap似乎没有更新多年...但我使用python3 ... – laike9m 2013-04-26 12:57:39

+2

@ laike9m:使用COM接口:http://stackoverflow.com/a/2885122/97160(确保你至少运行过'matlab -regserver') – Amro 2013-04-26 13:41:42

相关问题