将multiline python命令传递给maya commandPort

时间:2018-06-02 21:37:15

标签: python maya

我想以下列格式将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()




2 个答案:

答案 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)

谢谢,