讓我們試試這個與一些值:
>>> 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])
啊!我看行不行。但matlab似乎仍然不執行dlmwrite。 – alvarezcl
[this](http://www.mathworks.de/de/help/matlab/ref/dlmwrite.html)表明你的dlmwrite命令的語法不正確,你需要在參數之間加上逗號,並且引用字符串參數......我只是指出了shell語法的問題。我不使用matlab,所以我不能真正幫助你。 – mata
好的。所以你修正的第一個實際上是給我我需要的結果,而不使用子進程模塊。 Matlab會處理我的參數,但不會告訴我它做了什麼(這很奇怪),但它的工作原理。 謝謝! – alvarezcl