Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
123 lines (78 sloc) 3.1 KB

Erlang port protocol for Python

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 of packet and use_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 by decode() in case of incomplete input data.



  • 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()

On the Erlang side function hello() can be called like this:


hello(Name) ->
    Port = open_port({spawn, "python -u"}, [{packet, 1}, binary]),
    port_command(Port, term_to_binary({hello, Name})),
        {Port, {data, Data}} ->

Test it in the Erlang shell:

1> c(hello).
2> hello:hello("Bob").
"Hello, Bob"

Notes for Windows users

  • It seems Erlang's open_port function ignores nouse_stdio option on Windows. So the Port class must be instantiated with use_stdio=True argument.
  • Python must be ran with -u option to open stdin/stdout in binary mode.


Please report bugs, offer suggestions or feedback at: