Earth calling maya.standalone!
Posted on Sat 05 April 2014 in blog
Somebody over on Tech-artists.org was asking about how to control a maya.standalone instance remotely. In ordinary Maya you could use the commandPort, but the commandPort doesn’t exist when running under standalone - apparently it’s part of the GUI layer which is not present in batch mode.
So, I whipped up an uber-simple JSON-RPC-like server to run in a maya standalone and accept remote commands. In response to some queries I’ve polished it up and put it onto GitHub.
It’s an ultra-simple setup. Running the module as a script form mayapy.exe starts a server:
mayapy.exe path/to/standaloneRPC.py
To connect to it from another environment, you import the module, format the command you want to send, and shoot it across to the server. Commands return a JSON-encoded dictionary. When you make a successful command, the return object will include a field called ‘results’ containg a json-encoded version of the results:
cmd = CMD('cmds.ls', type='transform')
print send_command(cmd)
>>> {success:True, result:[u'persp', u'top', u'side', u'front'}
For failed queries, the result includes the exception and a traceback string:
cmd = CMD('cmds.fred') # nonexistent command
print send_command(cmd)
>>> {"exception": "",
"traceback": "Traceback (most recent call last)... #SNIP#",
"success": false,
"args": "[]",
"kwargs": "{}",
"cmd_name": "cmds.fred"}
It’s a single file for easy drop. Please, please read the notes - the module includes no effort at authentication or security, so it exposes any machine running it to anyone who knows its there. Don’t let a machine running this be visible to the internet!