我想以下列格式将multiline python命令作为字符串变量传递给maya commandPort。但看起来它错误了,当通过端口在maya中执行时。它作为未终止的字符串错误。 //
在maya中,我打开了一个命令端口
将maya.cmds导入为cmds cmds.commandPort(name =":6001")
这是我在nuke中执行的命令传递给maya命令端口,当在表单code1变量中提供多行命令时它不起作用,但是当我们在code2中提供命令时,它可以工作。有没有办法传递长多行命令字符串而不使用\ n或;在同一行?
### multiline string like below doesn't work, errors as unterminated sring
code1="""
cmds.polySphere()
"""
### if supplied in below format ,it works
code2="cmds.polySphere()"
import socket
host = 'localhost'
port = 6001
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)
except:
raise Exception, 'Connection Failed To : %s:%s' % (host, port)
finally:
# Close Socket Connection
maya.close()

答案 0 :(得分:0)
如果code1
格式化为一行,则执行正确:
code1 = """cmds.polySphere()"""
您可以使用;
(分号)来运行多个命令:
code1 = """cmds.polySphere();cmds.polyCube()"""
我个人觉得使用\n
(新行)格式化它更具可读性:
code1 = ("cmds.polySphere()\\n"
"if 2 > 1:\\n"
" cmds.polyCube()")
\n
需要使用额外的\
进行转义,因为它被放置在message
变量中的另一个字符串中。
您还可以使用replace()
来避免完全逃避:
code1 = ("cmds.polySphere()\n"
"if 2 > 1:\n"
" cmds.polyCube()").replace("\n", "\\n")
答案 1 :(得分:0)
感谢您的回复:)
我还找到了一种以正常方式编写多行的方法,而无需添加\ n或; ,并在下一步自动化
code1_multiLine="""
for i in range(5):
print i
"""
code1_singleLine=code1_multiLine.replace("\n",r"\n")
##then pass , this to the command port , in the top most example.
message = 'python("{}")'.format(code1_singleLine)
谢谢,