2013-07-02 31 views
1

我有這個電話,我似乎無法來解決問題:通過調用MATLAB殼牌與Python腳本問題

os.system('matlab -nodisplay -nosplash -r \"processFates;dlmwrite(\'' + FWHM + ' ' + volume  + ' ' + key + ' ' + str(numTrials) + '\", min_timing)\"') 

FWHM,音量鍵都是字符串。我不斷收到額外的錯誤),但似乎我需要所有這些。

回答

2

讓我們試試這個與一些值:

>>> FWHM, volume, key, numTrials, min_timing = 'a', 'b', 'c', 'd', 'e' 
>>> print('matlab -nodisplay -nosplash -r \"processFates;dlmwrite(\'' + FWHM + ' ' + volume  + ' ' + key + ' ' + str(numTrials) + '\", min_timing)\"') 
matlab -nodisplay -nosplash -r "processFates;dlmwrite('a b c d", min_timing)" 

d後雙引號?這應該是一個單引號。此外,您傳遞的最小時間是字符串min_timing,而不是您期望的變量。

使用的subprocess.Popen代替os.system你能避免一些問題與不依靠外殼逃逸,直接傳遞的參數爲字符串:

command = "processFates; dlmwrite('%s %s %s %s', %s)" % (FWHM, volume, key, numTrials, min_timing) 
proc = subprocess.Popen(['matlab', '-nodisplay', '-nosplash', '-r', command]) 
+0

啊!我看行不行。但matlab似乎仍然不執行dlmwrite。 – alvarezcl

+0

[this](http://www.mathworks.de/de/help/matlab/ref/dlmwrite.html)表明你的dlmwrite命令的語法不正確,你需要在參數之間加上逗號,並且引用字符串參數......我只是指出了shell語法的問題。我不使用matlab,所以我不能真正幫助你。 – mata

+0

好的。所以你修正的第一個實際上是給我我需要的結果,而不使用子進程模塊。 Matlab會處理我的參數,但不會告訴我它做了什麼(這很奇怪),但它的工作原理。 謝謝! – alvarezcl