首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >socket.recv为空,但结果显示在Maya中

socket.recv为空,但结果显示在Maya中
EN

Stack Overflow用户
提问于 2019-04-21 10:43:26
回答 1查看 416关注 0票数 0

我正在尝试将Maya中关节旋转的值获取到外部IDE中。我已经成功地发送了命令,并且Maya能够正确响应,但我在理解如何在IDE中接收回结果时遇到了问题。

我尝试过使用socket.recv和socket.recvmsg,但都遇到了错误。

在PyCharm中运行的代码

代码语言:javascript
运行
复制
import socket
host = 'localhost'
port = 7720

code1 = ("servo_1 = [cmds.getAttr('joint2.rotateY')]\\n"
         "print servo_1")
try:
   # Connect to Maya Command Port
   maya = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   maya.connect( (host,port) )
   # Send Command Through Socket --> Can Only Send MEL Commands
   message = 'python("{}")'.format(code1)
   print message
   maya.send(message)
   reply = maya.recv(4096)
   print reply
except:
   raise Exception, 'Connection Failed To : %s:%s' % (host, port)

finally:
   #Close Socket Connection
   maya.close()

在Maya中打开commandPort的代码

代码语言:javascript
运行
复制
import maya.cmds as cmds
if not cmds.commandPort(':7720', q=True, echoOutput=True, noreturn=False):
    cmds.commandPort(name=':7720')

如Maya中所示,预期输出为43.74,但实际输出为PyCharm

EN

回答 1

Stack Overflow用户

发布于 2019-04-22 12:01:26

我建立了一个从Maya到PyCharm的客户端套接字连接,创建了一个python套接字服务器,将maya设置为客户端,并使用pickle模块发送列表,从而使其正常工作。

Python服务器

代码语言:javascript
运行
复制
import socket
import pickle

HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(4096)
    if not data: break
    conn.send(data)
    data2 = pickle.loads(data)
    print 'servo_1 = %s' % (data2)
conn.close()

Maya客户端

代码语言:javascript
运行
复制
import socket, pickle
import maya.cmds as cmds

HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

max = int(cmds.playbackOptions( q=True, aet=True))
servo_1 = [cmds.getAttr("joint2.rotateY")]

data_string = pickle.dumps(servo_1)
s.send(data_string)

data = s.recv(4096)
data_arr = pickle.loads(data)
s.close()
print 'Received', repr(data_arr)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55779453

复制
相关文章

相似问题

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