Get maya command port

1,956 views
Skip to first unread message

illunara

unread,
May 7, 2015, 6:01:24 AM5/7/15
to python_in...@googlegroups.com
Hi everybody
I wonder if we can get port or port's name using for commandPort of current maya's instance?. I had been searching on google for a while but no luck
Thanks

Justin Israel

unread,
May 7, 2015, 6:51:01 AM5/7/15
to python_in...@googlegroups.com

Are you looking to find out this information from within the Maya process, or external to the Maya process?

Maya allows you to open multiple command ports, so there isn't necessarily just one. The docs show how you can query is a specific named port is open:
http://download.autodesk.com/global/docs/maya2014/en_us/CommandsPython/commandPort.html

If you are looking to find out which ports are open, from outside of Maya, then that is going to depend on which platform you are running. On OSX/Linux you could use the "lsof" command to check what a given process is listening on:

# list the tcp sockets that are listening from a Maya pid
$ lsof -i 4 -a -p <pid> | grep LISTEN

# list the unix domain sockets that are open from a Maya pid
$ lsof -U -a -p <pid>


Justin

 


--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/12d63e01-519c-4007-bb9e-5c701bd547aa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Tuan Nguyen

unread,
May 7, 2015, 7:05:35 AM5/7/15
to python_in...@googlegroups.com
Hi Justin
Thank for extra information, but how can you know which one message will be send to  in case users open multi-application's instance at the same time?

commandPort doesn't allow us to query port's name but only checking it. I can do a for loop, but somehow, i feel uneasy with that way :)

--
You received this message because you are subscribed to a topic in the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python_inside_maya/ct5I0Q4Vs94/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1qHuLvGK7V6SAmjXe_NwC65O9q2B0RpxML-pgNd-Z-RA%40mail.gmail.com.

Anthony Tan

unread,
May 7, 2015, 7:23:19 AM5/7/15
to python_in...@googlegroups.com
It may not have made it into the docs (okay, it clearly hasn't) but there's a listPorts flag for the command that might be of use?
 
import maya.cmds as mc
mc.commandPort(name="fish:65499")
print mc.commandPort(listPorts=1,q=True)
[u'mayaCommand', u'fish:65499', u'commandportDefault']
 
(and the only reason I know that exists is because my first reaction was to run help against the MEL - sometimes the online help takes too dang long to load :P)
 
help commandPort
// Result:
 
Synopsis: commandPort [flags] [String]
Flags:
   -q -query
  -bs -bufferSize         Int
  -cl -close             
  -eo -echoOutput        
  -lp -listPorts         
   -n -name               String
  -nr -noreturn          
  -po -pickleOutput      
 -pre -prefix             String
 -rnc -returnNumCommands
 -stp -sourceType         String
  -sw -securityWarning  

Tuan Nguyen

unread,
May 7, 2015, 7:33:45 AM5/7/15
to python_in...@googlegroups.com
Hidden treasure huh? Now Autodesk want to play it RPG style :D
Thank for your help Anthony

Justin Israel

unread,
May 7, 2015, 3:39:08 PM5/7/15
to python_in...@googlegroups.com

That's pretty useful. Strange it wasn't documented.


Tuan Nguyen

unread,
Jun 6, 2015, 2:41:24 AM6/6/15
to python_in...@googlegroups.com
Sorry for dig this up.
Its funny that i can't call user's python function from python commandPort. It keep telling me that function is not available.
How should i deal with it?

Justin Israel

unread,
Jun 6, 2015, 3:37:12 AM6/6/15
to python_in...@googlegroups.com

Its probably because the function you want to call isn't defined in the scope that is used in the commandPort call. Where is this user function defined and how are you calling it?


Tuan Nguyen

unread,
Jun 6, 2015, 3:49:11 AM6/6/15
to python_in...@googlegroups.com
After open commandPort in terminal
maya.exe -command "commandPort -name \":7002\" -sourceType \"python\""

I create a QTcpSocket and connect it to maya
QTcpSocket m_socket = new QTcpSocket(this);
m_socket->connectToHost("127.0.0.1", 7002);

I try simple command like cmds.polySphere() and it works fine. After that, i create a new function in Maya like:
def printOut() :
   print "Hello World"
   return "Hello World"

using the same method like above to connect to Maya, but it told me that
name "printOut" is not define


Tuan Nguyen

unread,
Jun 6, 2015, 3:53:28 AM6/6/15
to python_in...@googlegroups.com
Oh sorry, Here how i call it
QByteArray array = (QString("printOut()").toStdString().c_str());
    if(m_socket->waitForConnected(5000)) {
        m_socket->write(array);
        m_socket->waitForBytesWritten(1000);
        m_socket->waitForReadyRead(5000);

        qDebug() << "Reading: " << m_socket->bytesAvailable();
        qDebug() << m_socket->readAll();
    }

Justin Israel

unread,
Jun 6, 2015, 4:13:53 AM6/6/15
to python_in...@googlegroups.com

The commandPort has its own local scope which is not the same as what you are defining in the Script Editor (if that is what you meant by creating a new function in Maya. You can check this by creating functions or variables in the Script Editor and then doing this in the Script Editor:

import __main__
print __main__.__dict__.keys()

You should see all the symbols that are defined in the global namespace, which is what the tabs in the script editor see. But when you run commands in the commandPort, they are in a different scope. But you can access the main namespace if you want:

import __main__; __main__.printOut()

And creating symbols in the global space:

import __main__; __main__.foo = "foo"

For some more information about using scopes, you could look at the MayaSublime plugin to see how I run commands:
https://github.com/justinfx/MayaSublime/blob/master/MayaSublime.py#L38

I actually save a special namespace that gets reused for every call. It is there so as not to pollute Maya’s global namespace, but persist the state of what you are doing from Sublime.

Justin

Tuan Nguyen

unread,
Jun 6, 2015, 4:43:16 AM6/6/15
to python_in...@googlegroups.com
Oh, i see. That's new to me :D
However, if you call a sequence of command like this, you will not get any return value, right?

Justin Israel

unread,
Jun 6, 2015, 4:48:25 AM6/6/15
to python_in...@googlegroups.com

But you could either save the result and get it in another call. Or, make the entire thing a defined function with a return value.


Tuan Nguyen

unread,
Jun 6, 2015, 4:51:44 AM6/6/15
to python_in...@googlegroups.com
Yeah, i think i will write some set of function in Maya then call it later, it will be less overhead for me ^_^
And thank for your help, Justin.

Reply all
Reply to author
Forward
0 new messages