0

Auto-Rig スクリプトに取り組んでいましたが、コードが長くなって読みづらく、1 つの部分に集中できないことに気付きました。Pythonファイルをインポートし、インポートされたPythonファイル内の関数を呼び出すことを検討していました。ファイルをインポートする方法が見つからないようです。誰かがそれを手伝ってくれます。

4

2 に答える 2

1

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`;
于 2013-04-12T11:55:18.890 に答える
0

モジュールに含めたい関数を 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

于 2016-09-11T16:01:16.887 に答える