2013-10-09 53 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