Skip to main content

Erlang port protocol

Project description

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:

Project details


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

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

Uploaded Source

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

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page