1

Maya で作成された外部ソフトウェアから Maya にスクリプトを送信する必要があります。私は小さな例でこれをやろうとしました:

import socket
import time
from os.path import abspath

ADDR=('127.0.0.1',666)


def execute_file(fileFullPath):
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(ADDR)
    command = "execfile('%s')" % (fileFullPath)
    client.send(command)
    data = client.recv(1024)
    print data
    client.close()
    time.sleep(.1)
    return data

if __name__ == '__main__':
    py_file = 'hello_world.py'
    py_file = abspath(py_file)
    execute_file(py_file)

hello_world.py には次のものがあります。

print 'hello world'

ただし、これを実行すると、「hello world」が Maya で 2 回出力されます。

私が試した別のことは次のとおりです。

if __name__ == '__main__':
    print 'hello world'

しかし、それはまったく実行されません。

最後に、メソッドに印刷を入れて、次のように呼び出すことも試みました。

command = "execfile('%s')" % (fileFullPath)
client.send(command)
data = client.recv(1024)
client.send("exec('start()')")

しかし、名前 'start' is not definedエラーが表示されます

誰かがなぜこれが起こるのか知っていますか、またはこれを回避する方法について少なくとも考えを持っていますか?

よろしくお願いします。

4

2 に答える 2

1

いくつかのより予測可能な方法で同じ結果を得ることができます。

Maya はすでに TCP ベースの[command port ]を提供しており、ネットワーク経由で着信するコマンドを実行します。独自のサーバーを作成する必要はありません。[ RPYC ][ ZeroMQ ]などのより堅牢なリモート ソリューションを使用することもできます。

Maya( '127.0.0.1', 666 ) でサーバーを実行していましたか? それは重複した印刷物を説明するでしょう。

関連: はHTTP を介して受信するコマンドに応答するように Maya 内に単純なサーバーをセットアップする方法のです。

execfile()このコードが自分以外の誰かに見える場合は、通常、 を使用したくありません。これは、想像できる最大のセキュリティ ホールです。

于 2016-12-03T18:41:29.337 に答える
0

解決策を見つけました!

この回答で示唆されているように、実行するコマンドにimport maya.cmds as m\nを追加する必要がありました。

command = "import maya.cmds as mc\n import maya.cmds as mc\nexecfile('%s')" % (fileFullPath)

このコードによって、Maya がスクリプトを 2 回実行できなくなる理由を知りたいと思います。

于 2016-12-01T12:57:10.553 に答える