如何在Python代码中与Erlang代码通信?
假设我有一个用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
模块就可以了。