Передача многострочной Python-команды в Maya CommandPort - PullRequest
0 голосов
/ 03 июня 2018

Я хочу передать многострочную команду Python в качестве строковой переменной в MayP commandPort в следующем формате.Но, похоже, выдает ошибки, когда выполняется через Maya через порт.Это ошибка как неопределенная строка.//

В Maya я открыл командный порт как

import 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 голосов
/ 07 июня 2018

Спасибо за ответ:)

Я также нашел способ писать многострочные обычным способом без необходимости добавлять \ 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)

Спасибо,

0 голосов
/ 04 июня 2018

Он выполняется правильно, если 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")
...