Following the suggestion that I try TwOtp, I've tried the "kicking the tyres" with that library.
Adapting the sample code to work against my own local node seemed easy enough:
from twisted.internet import reactor from erlang import OneShotPortMapperFactory, buildNodeName def gotConnection(inst): return inst.factory.callRemote(inst, "file", "get_cwd" ).addCallback(gotResult) def gotResult(resp): print "Got response", resp reactor.stop() def eb(error): print "Got error", error reactor.stop() epmd = OneShotPortMapperFactory('client@chloe.ravnaandtines.com', "cookie") epmd.connectToNode("servernode@chloe.ravnaandtines.com").addCallback(gotConnection).addErrback(eb) reactor.run()
which involves rather more baggage than using IronPython against my tidying of the C# port of jinterface, for just a "hello world!", given that the jinterface-derived "hello world!" actually does more work (passing arguments, testing results):
import clr clr.AddReference("OtpErlang.dll") from System import Array from Tinesware.Otp import * import Tinesware.Otp.Erlang as Erlang cNode = Self("clientnode@chloe.ravnaandtines.com", "cookie") sNode = Peer("servernode@chloe.ravnaandtines.com") connection = cNode.Connect(sNode) args = Array[Erlang.IObject]([Erlang.Integer(1), Erlang.Integer(2)]) connection.SendRpc("mathserver", "add", args) sum = connection.ReceiveRpc() if sum.Value.ToInt32() != 3: print "Assertion failed, returned = " + sum.Value else: print "OK!"
And, like py_interface, I find that this doesn't "just work" either:
C:\Documents and Settings\Steve\My Documents\code\babel\erlang>python twotphw.py Got error [Failure instance: Traceback (failure with no frames): <class 'erlang.epmd.NodeNotFound'>: 1]
which will require a similar amount of rolling sleeves up and getting hands dirty to resolve.