2013-10-09 54 views
2

我自學了一點python編程和mathlab。我需要運行一些我用matlab編寫的python函數。使用matlab運行python腳本

我看到這個例子: 在蟒蛇

import sys 
    def squared(): 
     y=x*x 
     return y 

    if __name__ == '__main__': 
     x = float(sys.argv[1]) 
     sys.stdout.write(str(squared(x))) 

然後在MATLAB

[status,result]=system('nameofthescrip', 3) 
    status=0 
    result=9.0 

,但是,我不知道,當我試圖用我的功能,這是行不通的。

我的計劃是這樣的:

def function_1(): 
     Shows something on screen 
     return 

    def function_2(): 
     hear a sound 
     return 

    def function_3(): 
     write a number and press a key 
     return 

    x=[function_1,funciotion_2,function_3] 
    random.shuffle(x) 

但是當時我不知道該怎麼放的

if __name__ == '__main__': 
     x = float(sys.argv[1]) 
     sys.stdout.write(str(squared(x))) 

inestead所以,我可以從MATLAB運行它,就像例子我先寫了!

回答

1

在你給的例子,

if __name__ == '__main__': 
    x = float(sys.argv[1]) 
    sys.stdout.write(str(squared(x))) 

運行該腳本時,看到這SO answer運行的代碼。在你的情況,你想運行的代碼時,運行腳本是

x=[function_1,function_2,function_3] 
random.shuffle(x) 

所以你應該把這些代碼if塊內:

if __name__ == '__main': 
    x=[function_1,function_2,function_3] 
    random.shuffle(x) 

然後在MATLAB中可以調用的Python中類似的方式:

[status,result]=system('nameofthescript') 

沒有輸入到你的腳本,所以你不需要MATLAB system函數的第二個參數。確保在腳本的頂部有正確的shebang

+0

謝謝!我對你的文章瞭解很多!不幸的是,我有一個導入錯誤,我不知道如何解決,現在我正在處理這個問題!但你的回答幫了我很多!非常感謝! – Estefania

1

請注意,random.shuffle(x)只會重新排列列表x,它不會運行或返回任何內容,因此您的腳本不會輸出任何內容。如果你想運行的功能,你就必須像

for f in x: 
    f() 

添加一些代碼的結束,並通過功能(洗牌)列表,那麼這將循環運行的每一個在(隨機順序。

如果您的任何功能包括print,那麼您應該看到結果。如果你不這樣做,你可以嘗試用你在示例中看到的sys.std.write函數替換任何print

,除非你想import您的文件,但不運行在最後那部分你甚至都不需要if __name__=='__main__'線。

+0

非常感謝!我開始瞭解它是如何工作的。不幸的是,我在matlab中有一個導入錯誤,我似乎無法修復!但是我明白它是如何工作的,並且可以打開並運行其他更簡單的功能! – Estefania

+0

不客氣@Estefania!導入錯誤聽起來像是另一個問題,所以你最好再問一個單獨的問題。如果我的回答對您有幫助,請隨時註冊或使用綠色選中標記進行選擇。 – askewchan