首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python脚本与execfile一起发送时,在Autodesk Maya中运行两次

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

Stack Overflow用户
提问于 2016-12-01 11:39:35
回答 2查看 685关注 0票数 1

我需要从用玛雅编写的外部软件中发送一个脚本给玛雅。我试着用一个小例子来做这个:

代码语言:javascript
复制
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中,我有:

代码语言:javascript
复制
print 'hello world'

Hovewer,当我执行这个命令时,“你好世界”用玛雅印刷了两次。

我试过的另一件事是:

代码语言:javascript
复制
if __name__ == '__main__':
    print 'hello world'

但它根本不执行。

最后,我还尝试将打印放在一个方法中,并按如下方式调用它:

代码语言:javascript
复制
command = "execfile('%s')" % (fileFullPath)
client.send(command)
data = client.recv(1024)
client.send("exec('start()')")

但是我得到一个名字'start‘是没有定义的错误

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

提前谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-03 18:41:29

你可以用几种更可预测的方式得到同样的结果。

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

你在( '127.0.0.1', 666 ) Maya运行服务器吗?这就解释了复制的打印件。

相关:是关于如何在Maya内部设置一个简单的服务器以响应来自HTTP example的命令的example

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

票数 1
EN

Stack Overflow用户

发布于 2016-12-01 12:57:10

我找到了解决办法!

正如this答案中所建议的那样,我只需将导入maya.cmds作为mc\n添加到命令中以执行:

代码语言:javascript
复制
command = "import maya.cmds as mc\n import maya.cmds as mc\nexecfile('%s')" % (fileFullPath)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40909732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档