我需要从用玛雅编写的外部软件中发送一个脚本给玛雅。我试着用一个小例子来做这个:
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,当我执行这个命令时,“你好世界”用玛雅印刷了两次。
我试过的另一件事是:
if __name__ == '__main__':
print 'hello world'但它根本不执行。
最后,我还尝试将打印放在一个方法中,并按如下方式调用它:
command = "execfile('%s')" % (fileFullPath)
client.send(command)
data = client.recv(1024)
client.send("exec('start()')")但是我得到一个名字'start‘是没有定义的错误
有人知道为什么会发生这种情况吗,或者至少对我如何避免这种情况有一个想法?
提前谢谢你的帮助。
发布于 2016-12-03 18:41:29
你可以用几种更可预测的方式得到同样的结果。
Maya已经提供了一个基于TCP的],它将通过网络执行命令;您不需要编写自己的服务器。您还可以使用更健壮的远程解决方案,如]或]。
你在( '127.0.0.1', 666 ) Maya运行服务器吗?这就解释了复制的打印件。
相关:是关于如何在Maya内部设置一个简单的服务器以响应来自HTTP example的命令的example。
您通常不想使用execfile(),,如果这段代码对您以外的任何人都是可见的:这是最大的安全漏洞!
发布于 2016-12-01 12:57:10
我找到了解决办法!
正如this答案中所建议的那样,我只需将导入maya.cmds作为mc\n添加到命令中以执行:
command = "import maya.cmds as mc\n import maya.cmds as mc\nexecfile('%s')" % (fileFullPath)现在我想知道为什么这段代码阻止Maya两次执行脚本。
https://stackoverflow.com/questions/40909732
复制相似问题