与execfile一起发送时,Python脚本在Autodesk Maya中运行两次

与execfile一起发送时,Python脚本在Autodesk Maya中运行两次,python,maya,execfile,Python,Maya,Execfile,我需要从用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 =

我需要从用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'
Hovewer,当我执行此操作时,“hello world”在Maya中打印两次

我试过的另一件事是:

if __name__ == '__main__':
    print 'hello world'
但它根本就不会执行

最后,我还尝试将打印放入一个方法中,并像这样调用它:

command = "execfile('%s')" % (fileFullPath)
client.send(command)
data = client.recv(1024)
client.send("exec('start()')")
但随后我得到一个名称“start”未定义错误

有人知道为什么会发生这种情况,或者至少有人知道我如何避免这种情况吗

提前感谢您的帮助。

我找到了解决方案

正如回答中所建议的,我只需将import maya.cmds作为mc\n添加到要执行的命令中:

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

现在我想知道为什么这段代码会阻止Maya执行两次脚本。

您可以通过两种更可预测的方式获得相同的结果

Maya已经提供了基于TCP的,它将执行通过网络传入的命令;您不需要编写自己的服务器。您还可以使用更健壮的远程解决方案,如或

您是否在Maya中的
('127.0.0.1',666)
运行服务器?这就解释了重复打印输出的原因

相关:介绍如何在Maya内部设置一个简单的服务器,以响应通过HTTP发出的命令


如果此代码对您以外的任何人都可见,您通常不想使用
execfile()
:这是可以想象的最大安全漏洞

谢谢你的回答。看起来很棒。现在我得了流感在家,但我会尽快仔细看看,看看你的建议对我是否有效。无论如何,我会让你(+社区)知道。