我通过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”正在打印!我的整个代码都因此而破裂。
我试过了:
p.wait()
和subprocess.Popen.wait
。两者都不起作用。我错过了什么?
答案 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文件即可。如果您担心可能有重复项,那么只需将当前日期和时间附加到文件的末尾,这应该可以解决问题。