Hi all,
Trying to use Distributed Objects to communicate between PyObjC-based
processes on 10.5 and/or 10.6, but encountering various problems when
passing Python values, as illustrated below. The production code
currently only passes Python strings as arguments so I can work around
these issues for now by ensuring I always wrap them as NSStrings, but
it's going to create headaches if I start to use DO for more advanced
IPC.
Anyone any thoughts? (Including suggestions for alternative LAN-
capable IPC options.)
Thanks,
Hamish
------- doserver.py -------
from Cocoa import *
class Server(NSObject):
def test(self, arg):
print 'received:', arg
return NSString.stringWithString_(u"ok")
receiveport = NSSocketPort.alloc().initWithTCPPort_(8080)
connection =
NSConnection.connectionWithReceivePort_sendPort_(receiveport, None)
server = Server.alloc().init()
connection.setRootObject_(server)
NSRunLoop.mainRunLoop().run()
------- doclient.py -------
from Cocoa import *
sendport = NSSocketPort.alloc().initRemoteWithTCPPort_host_(8080,
u"localhost")
connection = NSConnection.connectionWithReceivePort_sendPort_(None,
sendport)
proxy = connection.rootProxy()
try:
print "reply", proxy.test(43)
except Exception, e:
print e
# doclient.py fails:
# ValueError: NSInvalidArgumentException - *** -encodeInt:forKey: only
defined for abstract class.
# Define -[NSConcretePortCoder encodeInt:forKey:]!
print "reply", proxy.test(NSNumber.numberWithInt_(43)) # OK
try:
print "reply", proxy.test([]) # OK on 10.6
except Exception, e:
print e
# doclient.py fails on 10.5
# ValueError: NSInvalidArgumentException - PyObjC: Encoding python
objects of type list is not supported
print "reply", proxy.test(True) # OK
print "reply", proxy.test(NSString.stringWithString_(u'hello')) # OK
print "reply", proxy.test(u'hello') # OK on 10.5
# doserver.py fails on 10.6:
# ValueError: NSInvalidArgumentException - -[OC_PythonUnicode
initWithBytes:length:encoding:]:
# unrecognized selector sent to instance 0x100261a80
--
Hamish Sanderson
Production Workflow Developer
Sun Branding Solutions Ltd
Tel: +44(0)1274 200 700
www.s-brandingsolutions.com
_______________________________________________
Pythonmac-SIG maillist - Pythonmac-SIG@python.org
http://mail.python.org/mailman/listinfo/pythonmac-sig