2013-04-26 187 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

相關問題