Project URLs:
The erlport
Python library implements Erlang external term format and Erlang port
protocol for easier
integration of Python and Erlang.
The library exports the following classes and functions:
Port(packet=1, use_stdio=False)
- class implementing port which connects with the corresponding Erlang port. See open_port/2 for description ofpacket
anduse_stdio
arguments.Protocol()
- class which simplifies creation of request-response protocols.Atom(str)
- class which represents an Erlang atom.String(unicode | list)
- class representing an Erlang string. Must be used as a wrapper if Unicode string expected instead of a list.BitBinary(str)
- class representing an Erlang bitstring whose length in bits is not a multiple of 8.decode(str)
- function to convert binary data into a term.encode(term, compressed=False)
- function to convert a term into the external format. compressed is the zlib compression level or True for the default of 6.IncompleteData
- exception raised bydecode()
in case of incomplete input data.
Prerequisites:
- Erlang >= R11B-4
- Python >= 2.4
To install the library use easy_install
from setuptools package like this:
$ easy_install erlport
See examples
directory in the source distribution for additional examples.
For simple request-response protocol use Port
and Protocol
on the
Python side like this:
from erlport import Port, Protocol class HelloProtocol(Protocol): def handle_hello(self, name): return "Hello, %s" % name if __name__ == "__main__": proto = HelloProtocol() proto.run(Port(use_stdio=True))
On the Erlang side function hello()
can be called like this:
-module(hello). -export([hello/1]). hello(Name) -> Port = open_port({spawn, "python -u hello.py"}, [{packet, 1}, binary]), port_command(Port, term_to_binary({hello, Name})), receive {Port, {data, Data}} -> binary_to_term(Data) end.
Test it in the Erlang shell:
1> c(hello). {ok,hello} 2> hello:hello("Bob"). "Hello, Bob"
- It seems Erlang's
open_port
function ignoresnouse_stdio
option on Windows. So thePort
class must be instantiated withuse_stdio=True
argument. - Python must be ran with
-u
option to openstdin
/stdout
in binary mode.
Please report bugs, offer suggestions or feedback at:
- Report bugs at http://github.com/hdima/erlport/issues
- Email me at <dima at hlabs.spb.ru>
- Write or follow me at http://twitter.com/hdima