Python不等待MATLAB完成

时间:2012-12-19 19:33:45

标签: python python-2.7

我通过subprocess模块将一个小的MATLAB脚本与Python连接起来。如下:

cmd='(matlab -nosplash -nodesktop -r "optimizer;quit;")'
p = subprocess.Popen(cmd,stdin=None,stdout=None,shell=True)
#subprocess.Popen.wait(p)
#p.wait()
print "DONE?"

但是在“MATLAB”开始之前,“DONE”正在打印!我的整个代码都因此而破裂。

我试过了:

  • 使用os.system()调用(这是我开始的地方,但我在SO上读到它已被弃用)
  • 使用p.wait()subprocess.Popen.wait。两者都不起作用。
  • 使用3分钟的手动暂停(MATLAB平均完成的最长时间) Super Sloppy

我错过了什么?

3 个答案:

答案 0 :(得分:5)

对我来说很好:

import subprocess
retcode = subprocess.call(["matlab", "-nosplash", "-nodesktop", "-r", "quit;"])
print "DONE", retcode

相应地拆分命令参数,仅使用您实际需要的选项(例如,不需要shell=True),使用直接执行您所需的功能(call),即,打电话等待完成。

根据您的安装(请参阅http://www.mathworks.com/help/matlab/ref/matlabwindows.html),可能会以立即退出的方式启动Matlab。要处理它,请在参数列表中添加“-wait”。

答案 1 :(得分:5)

使用“-wait”标志启动Matlab。从文件:

“MATLAB由一个单独的启动程序启动,通常启动MATLAB然后立即退出。使用此选项告诉启动程序在MATLAB终止之前不要退出。当你需要处理来自MATLAB的结果时,这个选项很有用。脚本。使用此选项调用MATLAB会阻止脚本继续运行,直到生成结果。“

答案 2 :(得分:0)

根据您对我的评论的回复,让我回答您的问题,我为我的申请所做的事情与您的申请有类似的过程(尽管在C#中)。而不是试图迫使你的进程等待MATLAB完成(显然现在不能正常工作),只需等待写入该CSV文件即可。如果您担心可能有重复项,那么只需将当前日期和时间附加到文件的末尾,这应该可以解决问题。