2012-08-31 112 views
7

只爲明確起見,請考慮以下的超簡單的Python腳本,文件名爲add_em如何:MATLAB腳本,可以從Unix命令行獲得參數

#!/usr/bin/env python 
# script name: add_em 

from sys import argv 

x = int(argv[1]) 
y = int(argv[2]) 
x_plus_y = x + y 
print '%d' % x_plus_y 

我現在可以運行這個腳本,和參數傳遞給它,從UNIX命令行,像這樣:

% python add_em 3 8 
11 

如果我使腳本可執行,我甚至都不需要提python在命令行上:

% chmod +x add_em 
% add_em 41 -29 
12 

能有人告訴我怎麼寫(和運行)MATLAB腳本因此它可以完全像上面的腳本呢?特別是,它必須能夠從Unix命令行讀取它的參數(而不是像MATLAB GUI的「命令行」),並將它們的數字和輸出到標準輸出。

注:此腳本不必是 「獨立」; IOW,可以假定MATLAB是本地安裝的,甚至可以在命令行中提到matlab(類似於上面的第一種形式,在命令行上顯式調用python解釋器)。

謝謝! PS:不用說,這個腳本是「健壯」的對立面,但我的目標是製作一個易於傳達的例子。

+0

有一個答案在這裏你的問題:http://stackoverflow.com/questions/3335505/how-can-i-pass-command-line-參數獨立-matlab-可執行 - 運行 – piokuc

+0

***沒有***,那問題n代表* standalone *(意味着在沒有本地安裝的MATLAB副本的情況下運行)。這就是爲什麼我***在我的問題中強調***,我不需要這個。特別是,我***不想編譯MATLAB腳本。 – kjo

回答

8

你可以有一個MATLAB功能做你想要的東西里面​​

function add_em(x, y) 
x_plus_y = x + y; 
disp(x_plus_y); 
exit; 

,然後使用-r開關從Unix命令行調用它。例如:

matlab -nodesktop -nojvm -nosplash -r "add_em(3, 8)" 

-選項抑制臺式機,Java和飛濺因此腳本/功能,無需額外的開銷執行。

你還可以通過重定向輸出到日誌文件(對於任何計算)或拖尾,例如抑制MATLAB歡迎/版權信息,以便得到的東西輸出印刷在終端

matlab -nosplash -nodesktop -nojvm -r "add_em(3, 8)" | tail -n 3 

更新:剛剛發現這篇文章/答案與相關信息:suppress start message of Matlab

+0

感謝您的一個很好的答案。我希望我能夠更多地投票。 – kjo

+3

你能澄清這件事嗎? MATLAB如何知道在哪裏找到定義函數的.m文件?你需要把它放在特定的地方來工作嗎? –