2019年4月8日月曜日

MayaのスクリプトエディタでPythonを実行する

PythonスクリプトをMELのようにスクリプトエディタで実行してみるテスト。
サンプルの.melファイルと.pyファイルはこんな感じのこんにちは表示。



hello.mel
global proc printHello()
/**************************************************************************//**
    テスト
 ******************************************************************************/
{
    print("Hello MEL\n");
    
}

hello.py
def printHello():
    '''テスト
    '''
    print "Hello Python"


こいつらをスクリプトエディタで呼び出します。
まずはMELの場合。

source "hello.mel";
printHello();

こんな感じで、関数を実行する前にスクリプトを読み直すことでデバックがはかどります。これと同じようなことをPythonでやりたいわけです。
ちなみに source すると指定したスクリプトファイルを強制的にコンパイルするのでファイル名と同じ名前のグローバルプロシージャでなくても呼び出すことができます。

pythonのドキュメントを読んでみると、import したモジュールを reload すれば良いみたいです。

import hello.py
reload(hello)

hello.printHello()

これで同じ事ができるはずです。
が、

ドーンだYO!!

こんなエラーが出てきました。
# Error: Syntax Error: file<maya console> line 2: None-ASCII character~

上のスクリプトだとドキュメントに日本語を使っているから、そこで止まります。
まぁ削除すればよいんですけど、日本語も使えないこんな世の中じゃ・・・python。

でファイルの先頭にこんな魔法のコメントを入れるのです。

# coding: cp932

cp932(Code Page932)というのは shift-jis のことで、こうすると今度はmacとかで停止するはずです。mac持ってないから知らんけど。
utf-8を指定すれば、windowsでもmacでもエラーは無くなると思いますが __doc__したときにwindowsで文字化けするわけです。

これが、ここにつながって来るんですね。

こういう部分もmayaでpythonを使いたくない理由だったりするのですが、PEP8ではコーディング指定のマジックコメントが非推奨だったりしているわけです。
はやく3系がまともに動くようなバージョンアップをしてくれれば良いんですがね。

0 件のコメント:

コメントを投稿