socket.recv is empty but the result is showing in Maya(Socket.recv为空,但结果显示在Maya中)
本文介绍了Socket.recv为空,但结果显示在Maya中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将Maya中关节旋转的值获取到外部IDE中。我已经成功地发送了命令,并且Maya能够正确响应,但我在理解如何在IDE中接收回结果时遇到了问题。
我尝试使用socket.recv和socket.recvmsg,但两者都有错误。
在PyCharm中运行的代码
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中打开命令端口的代码
import maya.cmds as cmds
if not cmds.commandPort(':7720', q=True, echoOutput=True, noreturn=False):
cmds.commandPort(name=':7720')
如Maya中所示,预期输出为[43.74],但在PyCharm中实际输出
推荐答案
CommandPort用于发送命令而不是检索输出,但仍有办法做到这一点:诀窍是您需要分别发送每个命令和接收输出:https://forums.cgsociety.org/t/telnet-or-socket-no-result-back-from-maya/1730817/2
但聪明的方法是使用maya.api.OpenMaya
MCommandMessage
消息回调来处理Maya接收到的流输出;因此,基本上,一个服务器(编辑器)客户端(Maya)用于发送命令,另一个客户端(编辑器)服务器用于流输出。这就是插件的工作原理,比如MayaCharm(对于PyCharm)和MayaSublime(对于Sublime),这也是我在研究之后最终选择的。请参阅详细示例:
https://www.xingyulei.com/post/maya-commandport/
https://www.xingyulei.com/post/maya-streaming/
这篇关于Socket.recv为空,但结果显示在Maya中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Socket.recv为空,但结果显示在Maya中
猜你喜欢
- 如何命名HDF5数据集中的列? 2022-09-21
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 合并具有多个索引和列值的数据帧 2022-09-22
- 使用带有CROSS_VAL_SCORE的自定义估计器失败 2022-09-21
- 为什么切换屏幕在Kivy中不起作用? 2022-09-21
- H5py:如何在HDF5组和数据集上使用key()循环 2022-09-21
- 如何将属性添加到作为组存储在HDF5文件中的 pa 2022-09-21
- 将文件从Azure文件加载到Azure数据库 2022-09-21
- 基于多个一级列的子集多索引DataFrame 2022-09-22
- 如何防止Groupby超越指数? 2022-09-22