Skip to main content

Project URLs:

Description

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, compressed=False) - class implementing port which connects with the corresponding Erlang port. See open_port/2 for description of packet and use_stdio arguments. compressed is the zlib compression level or True for the default of 6.

  • 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.

Installation

Prerequisites:

  • Erlang >= R11B-4

  • Python >= 2.4

To install the library use easy_install from setuptools package like this:

$ easy_install erlport

Examples

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"

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.

Feedback

Please report bugs, offer suggestions or feedback at:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

erlport-0.6.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

erlport-0.6-py2.6.egg (15.5 kB view details)

Uploaded Egg

File details

Details for the file erlport-0.6.tar.gz.

File metadata

  • Download URL: erlport-0.6.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for erlport-0.6.tar.gz
Algorithm Hash digest
SHA256 bbd894e1502a00964bca8a84283048cee599234b5a59fffa21c82e09366a399c
MD5 852745e9f2ca90f7c802ee7ae9b015ad
BLAKE2b-256 8a78e2a89dd0802f2f4a04a22d2dfb1855ed75d55a6ae219ef251e0c723d0f43

See more details on using hashes here.

File details

Details for the file erlport-0.6-py2.6.egg.

File metadata

  • Download URL: erlport-0.6-py2.6.egg
  • Upload date:
  • Size: 15.5 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for erlport-0.6-py2.6.egg
Algorithm Hash digest
SHA256 f6662a9b141142c1a1234af6cc9d38d7ac1ec841e59495bc1ba61e8b0b94ac6d
MD5 c336fbd31642b94ad62d7736c11d084d
BLAKE2b-256 6d314f7393314dba575bb63036c8c573f13c35be5516b28733711a50ba9e76af

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6 This release

2 files

0.5

2 files

0.4

2 files

0.3

2 files

0.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page