2013-03-05 3 views
0

Я работал над своим сценарием Auto-Rig и замечал, что код очень долго читает и фокусируется на одной части. Я изучал импорт файла python и вызывал функции внутри импортированного файла python. Кажется, не может найти способ импортировать файл, если бы кто-то помог мне с этим.import python in pymel

+1

записи thefile.py, а затем в сценарии 'импорта thefile'. Используйте функции, вызывающие 'thefile.afunction()' – joaquin

+0

, лучший способ - потратить несколько минут на чтение документации python о [наследованиях, частных переменных и локальных ссылках класса] [1], что является фундаментальным для понимания того, что «объект» в любом oop должен иметь данные и поведение, [1]: https://docs.python.org/2/tutorial/classes.html –

ответ

1

Я рекомендую вам создать модуль питона с файлом Python, а затем сделать из MEL файла:

python "import my_python_module"; 

string $pycommand = "my_python_module.my_function(param1, "+ $mel_string_param1 +",\"" + $mel_string_param2 + "\")"; 

string $result= `python $pycommand`; 
0

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

В моем примере myModule.py содержит:

def myFunc1(): 
    print 'myFunc1 is called' 
    pass 

def myFunc2():  
    print 'myFunc2 is called' 
    return 

Теперь сохраните файл в папке. Мой пример путь к файлу Питон:

d:\projects\python\myModule.py

Теперь в вашем майя редактор сессии сценария введите:

import sys 
import os 

modulePath = os.path.realpath(r'd:\projects\python\myModule.py') 
moduleName = 'myModule' 

if modulePath not in sys.path: 
    sys.path.append(modulePath) 

try: 
    reload(moduleName) 
except: 
    exec('import %s' % moduleName) 

Ваш модуль должен быть импортированы.

Позовите myFunc1() из myModule:

myModule.myFunc1()

Это даст выход:

myFunc1 is called

Теперь мы называем myFunc2() из myModule:

myModule.myFunc2()

Это даст выход:

myFunc2 is called

Если теперь мы обновили myModule.py с новой функцией:

def myFunc3():  
     print 'myFunc3 is called' 
     return 

Нам нужно только запустить тот же код, указанный выше, чтобы перезагрузить обновленное модуль.

Теперь мы можем попробовать заявление:

myModule.myFunc3()

... и получить этот результат:

myFunc3 is called