ERLANG和PYTHON互通实现过程详解


Posted in Python onJuly 05, 2019

最近开发 Erlang ,对其字符串处理能力无言至极,于是决定把它和python联合起来,打造一个强力的分布式系统,等将来需要系统级开发时,我再把 C++/C组合进来.

首先参考了 Erlang 官方文档和 http://blog.developers.api.sina.com.cn/?tag=erlang 以及 http://kazmier.net/computer/port-howto/ .

研读了将近24个小时, 才终于完全把问题解决. 起名为town,town在英文里表示集市,也就是代表各种语言在这里的交流与互动。) )

-module(town).
-behaviour(gen_server).
 
%% API
-export([start/0,combine/1]).
 
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
terminate/2, code_change/3]).
-record(state, {port}).
 
start() ->
 gen_server:start_link({global, ?MODULE}, ?MODULE, [], []).
stop() ->
 gen_server:cast(?SERVER, stop).
init([]) ->
 process_flag(trap_exit, true),
 Port = open_port({spawn, "python -u /home/freefis/Desktop/town.py"},[stream,{line, 1024}]),
 {ok, #state{port = Port}}.
 
handle_call({combine,String}, _From, #state{port = Port} = State) ->
 port_command(Port,String),
 receive
 {Port,{data,{_Flag,Data}}} ->
  io:format("receiving:~p~n",[Data]),
  sleep(2000),
  {reply, Data, Port}
 end.
handle_cast(stop, State) ->
 {stop, normal, State};
handle_cast(_Msg, State) ->
 {noreply, State}.
 
handle_info(Info, State) ->
 {noreply,State}.
 
terminate(_Reason, Port) ->
 ok.
 
code_change(_OldVsn, State, _Extra) ->
 {ok, State}.
 
%%--------------------------------------------------------------------
%%% Internal ---------------------------------------------------------
combine(_String) ->
 start(),
 String = list_to_binary("combine|"++_String++"\n"),
 gen_server:call(?SERVER,{combine,String},infinity),
 stop().

这段是Python的脚本 当erlang中town:combine(“sentence1+sentence2”)执行时,会在后台启动python的脚本,处理完毕后返回给Erlang结果:sentence1sentence2,然后退出。

import sys
def handle(_string):
 if _string.startswith("combine|"):
  string = "".join( _string[8:].split(","))
  return string
 
"""waiting for input """
while 1:
 # Recv. Binary Stream as Standard IN
 _stream = sys.stdin.readline()
 
if not _stream: break
 # Scheme, Turn into Formal String
 inString = _stream.strip("\r\n")
 # handle String
 outString = handle(inString)
 # send to port as Standart OUT
 sys.stdout.write("%s\n" % (outString,))
 sys.exit(0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python进程通信之匿名管道实例讲解
Apr 11 Python
Python 的内置字符串方法小结
Mar 15 Python
Python实现堆排序的方法详解
May 03 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
Django 视图层(view)的使用
Nov 09 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
django数据库自动重连的方法实例
Jul 21 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
基于Python的Jenkins的二次开发操作
May 12 Python
增大python字体的方法步骤
Jul 05 Python
django使用多个数据库的方法实例
Mar 04 Python
python如何读取bin文件并下发串口
Jul 05 #Python
anaconda如何查看并管理python环境
Jul 05 #Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 #Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 #Python
python调用并链接MATLAB脚本详解
Jul 05 #Python
python实现最大子序和(分治+动态规划)
Jul 05 #Python
Python实现最大子序和的方法示例
Jul 05 #Python
You might like
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码
2007/04/01 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
jQuery实现的图片轮播效果完整示例
2016/09/12 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
js实现select下拉框选择
2020/01/11 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python 线程池用法简单示例
2019/10/02 Python
python模拟实现斗地主发牌
2020/01/07 Python
Python hashlib模块的使用示例
2020/10/09 Python
Python函数调用追踪实现代码
2020/11/27 Python
银行求职信个人范文
2013/12/16 职场文书
12岁生日演讲稿
2014/05/14 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
科学育儿宣传标语
2014/10/08 职场文书
2014年文员工作总结
2014/11/18 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
如何在Python项目中引入日志
2021/05/31 Python
python实现Nao机器人的单目测距
2021/09/04 Python
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python