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 错误和异常小结
Oct 09 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
Python实现带百分比的进度条
Jun 28 Python
python3爬虫之设计签名小程序
Jun 19 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
用Python配平化学方程式的方法
Jul 20 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Selenium自动化测试工具使用方法汇总
Jun 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
PHP文件下载类
2006/12/06 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
TypeScript基础入门教程之三重斜线指令详解
2018/10/22 Javascript
vue-router传参用法详解
2019/01/19 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python编程中装饰器的使用示例解析
2016/06/20 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
如何理解python中数字列表
2020/05/29 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
春节超市活动方案
2014/08/14 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
体育教师研修感悟
2015/11/18 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
二年级数学教学反思
2016/02/16 职场文书
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
JavaScript获取URL参数的方法分享
2022/04/07 Javascript
centos7安装mysql5.7经验记录
2022/05/02 Servers