如何在Python代码中与Erlang代码通信?

2 投票
4 回答
2992 浏览
提问于 2025-04-17 00:11

假设我有一个用Erlang写的“企业应用程序”:

-module(hello).
-export([start/0]).

start() ->
  spawn(fun() -> loop() end).

loop() ->
 receive
   hello ->
     io:format("Hello, World!~n"),
     loop();

   goodbye ->
     ok
 end.

有没有办法从Python代码中运行它?这样我就可以把“Hello, World!”的文本返回给Python?Erlport好像是反向工作的……

补充一下:换句话说,怎么从Python连接到Erlang的端口?

4 个回答

0

你可以使用 subprocess 模块来实现这个功能。下面是一个使用这个模块的基本示例:

output = Popen(["ls", "-L"], stdout=PIPE).communicate()[0]

这个 communicate 函数会等待输入结束(EOF),所以你不能实时与应用程序进行互动。
另外,pexpect 模块也可以做到这一点,并且允许你与应用程序进行互动。

0

有一个用于 Erlang 的 Python 库,可以导入这个库哦;-) http://erlport.org/

下面是一个简单的示例:

from erlport import Port, Protocol, String


# Inherit custom protocol from erlport.Protocol
    class HelloProtocol(Protocol):

# Function handle_NAME will be called for incoming tuple {NAME, ...}
    def handle_hello(self, name):
    # String wrapper forces name to be a string instead of a list
    return "Hello, %s" % String(name)


if __name__ == "__main__":
    proto = HelloProtocol()
    # Run protocol with port open on STDIO
    proto.run(Port(use_stdio=True))
6

你要找的是Py-Interface,它可以让你在Python中创建一个和Erlang兼容的节点。

这个py_interface可以让你创建一个节点,用来和其他Erlang节点进行通信。

如果你有一个用Erlang写的一次性命令行程序,只想运行它并获取输出,那就像使用其他程序一样,直接用subprocess模块就可以了。

撰写回答