2012-10-31 19 views
2

我試圖執行從MATLAB外部程序才能成功:執行使用時與(號),但當時並沒有等待完成

cmdstr = sprintf('"%s\\myEXECUTABLE" "%s" -options',fullEXEpath, fullInputFilePath); 
[status, res] = system(cmdstr); 

我收到「狀態= 1「,部分程序在」res「中輸出(雖然沒有錯誤信息)並且沒有輸出文件。

,但執行正好與&(符號)相同的命令:

cmdstr = sprintf('"%s\\myEXECUTABLE" "%s" -options &',fullEXEpath, fullInputFilePath); 
[status, res] = system(cmdstr); 

在通過DOS命令窗口的背景意義,只是罰款(等於狀態創建0和輸出文件)。

我已經看到某個地方可能是防病毒程序阻止程序通過Matlab執行,但由於我是端點用戶,所以無法禁用它。

使用「&」導致我的GUI打開命令窗口並在後臺運行,同時立即恢復Matlab代碼。

我可以用命令窗口打開,但不能用Matlab立即恢復,因爲我在我的MATLAB代碼中使用了輸出文件,這些文件不一定就緒。

有沒有辦法驗證外部程序已經結束? 我想簡單地說:

while (status) %waiting for system to return status = 0 
    disp 'waiting...'; 
end 

,但它似乎仍與以前完成「狀態= 0」返回......

或者更確切地說 - 是有辦法避免&?

任何答案將不勝感激。

回答

1

的調試方法,您可以使用 系統(cmdstr,「 - 回聲」)

由於錯誤信息無處可去,你不會看到他們。 (matlab只返回輸出,可能不包含錯誤流)

我是否正確使用該命令調用GUI程序?根據matlab文檔:

&符號,&,字符有特殊含義。對於控制檯程序 ,這會導致控制檯打開。省略此字符會導致控制檯程序以圖標形式運行。對於GUI程序,追加此 字符會導致應用程序在後臺運行。 MATLAB 繼續處理。

所以控制檯程序(無頭程序)不允許Matlab在執行時繼續。