用matlab运行python脚本

时间:2013-10-09 17:02:11

标签: python

我在python和mathlab中教自己一些编程。我需要运行我在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)))

所以我可以从matlab运行它,就像我先写的例子一样!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

请注意,random.shuffle(x)只会重新排列列表x,它不会运行或返回任何内容,因此您的脚本不会输出任何内容。如果要运行这些功能,则必须添加类似

的内容
for f in x:
    f()

到代码的末尾,这将遍历(混乱)函数列表,然后以该(随机)顺序运行每个函数。

如果您的任何功能包含print,那么您应该会看到结果。如果不这样做,您可以尝试使用示例中显示的print函数替换任何sys.std.write

您甚至不需要if __name__=='__main__'行,除非您想要import您的文件,但在最后运行该部分。