2013-10-09 2 views
2

Я преподаю немного программирования в python, а также в mathlab. И мне нужно запустить несколько функций, которые я написал в python с помощью matlab.запущенные скрипты python с matlab

Я видел этот пример: В питона

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) 

Но тогда я не знаю, что поставить inestead из

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

Так что я могу запустить его из 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 __name__ == '__main': 
    x=[function_1,function_2,function_3] 
    random.shuffle(x) 

Тогда в MATLAB вы можете ссылаться на Python в Подобным же образом:

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

Там нет ввода в сценарий, так что вам не нужен второй аргумент функции MATLAB system. Убедитесь, что у вас есть правильный shebang в верхней части вашего скрипта!

+0

ThankS! Я много разбирался с вашим сообщением! К сожалению, у меня ошибка импорта, я не знаю, как исправить, я сейчас работаю над этим! Но ваш ответ мне очень помог! Спасибо огромное! – Estefania

1

Отметьте, что random.shuffle(x) просто изменит список x, он не запустит и не вернет ничего, поэтому ваш скрипт ничего не выводит. Если вы хотите запустить функции, вам придется добавить что-то вроде

for f in x: 
    f() 

до конца вашего кода, и это будет цикл через (перемешиваются) список функций, а затем запустить каждый из них в том, что (случайный порядок.

Если какая-либо из ваших функций включает print, вы должны увидеть результаты. Если вы этого не сделаете, вы можете попробовать заменить любую print на функцию sys.std.write, которую вы видите в примере.

Вам не нужно даже в if __name__=='__main__' линии, если вы не хотите, чтобы import файл, но не запустить ту часть в конце.

+0

Большое вам спасибо! Я начинаю понимать, как это работает.К сожалению, у меня ошибка импорта в Matlab, которую я, похоже, не могу исправить! Однако я понял, как это работает, и может открывать и запускать другие более простые функции! – Estefania

+0

Добро пожаловать @Estefania! Ошибка импорта звучит как другая проблема, поэтому вам может быть лучше задавать отдельный вопрос. Если мой ответ помог вам, пожалуйста, не стесняйтесь повышать его или выбирать с помощью зеленой галочки. – askewchan

Смежные вопросы