跳转到主要内容

Erlang端口协议

项目描述

项目URL

描述

erlport Python库实现了Erlang外部术语格式Erlang端口协议,以便更容易地将Python和Erlang集成。

库导出以下类和函数

  • Port(packet=1, use_stdio=False, compressed=False) - 实现端口的类,与相应的Erlang端口连接。有关packetuse_stdio参数的说明,请参阅open_port/2compressed是zlib压缩级别或为默认值6的True。

  • Protocol() - 简化请求-响应协议创建的类。

  • Atom(str) - 表示Erlang原子的类。

  • String(unicode | list) - 表示Erlang字符串的类。如果期望Unicode字符串而不是列表,则必须用作包装器。

  • BitBinary(str) - 表示长度不是8的倍数的Erlang位字符串的类。

  • decode(str) - 将二进制数据转换为项的函数。

  • encode(term, compressed=False) - 函数,用于将术语转换为外部格式。 compressed 是 zlib 压缩级别,或默认为 6 的 True。

  • IncompleteData - 当 decode() 遇到不完整输入数据时抛出的异常。

安装

先决条件

  • Erlang >= R11B-4

  • Python >= 2.4

使用 easy_installsetuptools 包安装库,例如这样

$ easy_install erlport

示例

请参阅源分布中的 examples 目录以获取更多示例。

对于简单的请求-响应协议,在 Python 端使用 PortProtocol,如下所示

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

在 Erlang 端,函数 hello() 可以这样调用

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

在 Erlang shell 中测试它

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

针对Windows用户的说明

  • 看起来 Erlang 的 open_port 函数在 Windows 上忽略了 nouse_stdio 选项。因此,必须使用 use_stdio=True 参数实例化 Port 类。

  • Python 必须使用 -u 选项运行,以在二进制模式下打开 stdin/stdout

反馈

请在以下位置报告错误、提出建议或反馈

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

erlport-0.6.tar.gz (13.2 kB 查看哈希)

构建分布

erlport-0.6-py2.6.egg (15.5 kB 查看哈希)

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面