Auto-Rig スクリプトに取り組んでいましたが、コードが長くなって読みづらく、1 つの部分に集中できないことに気付きました。Pythonファイルをインポートし、インポートされたPythonファイル内の関数を呼び出すことを検討していました。ファイルをインポートする方法が見つからないようです。誰かがそれを手伝ってくれます。
2 に答える
Python ファイルを使用して 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`;
モジュールに含めたい関数を python ファイルとして記述します。(ヒント: Python ファイル名を数字で始めないでください)。
私の例myModule.py
には以下が含まれています:
def myFunc1():
print 'myFunc1 is called'
pass
def myFunc2():
print 'myFunc2 is called'
return
ファイルをフォルダに保存します。私のPythonファイルパスの例は次のとおりです。
d:\projects\python\myModule.py
Maya セッション スクリプト エディタで、次のように入力します。
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