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实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
python opencv读mp4视频的实例
Dec 07 Python
超简单的Python HTTP服务
Jul 22 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
Python基于requests库爬取网站信息
Mar 02 Python
520使用Python实现“我爱你”表白
May 20 Python
详解pycharm配置python解释器的问题
Oct 15 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
Python中request的基本使用解决乱码问题
Apr 12 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/04 无线电
PHP面向对象编程快速入门
2006/10/09 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Python class的继承方法代码实例
2020/02/14 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
什么是接口(Interface)?
2013/02/01 面试题
师范毕业生自荐信
2013/10/17 职场文书
不同意离婚答辩状
2015/05/22 职场文书
电影开国大典观后感
2015/06/04 职场文书
中学图书馆工作总结
2015/08/11 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript