elang和python互通的例子

抄袭自http://www.erlangsir.com/2011/04/14/python-%E5%92%8Cerlang%E4%BA%92%E9%80%9A%E4%BE%8B%E5%AD%90/

town.erl

-module(town).
-behaviour(gen_server).

-export([start/0, combine/1]).
-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({local, ?MODULE}, ?MODULE, [], []).

stop() ->
    gen_server:cast(?MODULE, stop).

init([]) ->
    process_flag(trap_exit, true),
    Port = open_port({spawn,
              "python -u ./town.py"},
        [stream, {line, 1024}]
    ),

    {ok, #state{port = Port}}.

handle_call({combine, Str}, _From, #state{port = Port} = State) ->
    io:format("here~n"),
    port_command(Port, Str),

    receive
        {Port, {data, {_Flag, Data}}} ->
            io:format("receiving:~p~n", [Data]),
            timer: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(),
    Str = list_to_binary("combine|" ++ _String ++ "\n"),
    gen_server:call(?MODULE, {combine, Str}).

town.py

#! /usr/bin/python
# Filename : town.py

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
    inString = _stream.strip("\r\n")
    outString = handle(inString)
    sys.stdout.write("%s\n" % (outString,))
    sys.exit(0)

测试

Eshell V6.2  (abort with ^G)
1> town:combine("aaa+bbb").
here
receiving:"aaa+bbb"
"aaa+bbb"
2> 
时间: 2024-10-11 16:04:16

elang和python互通的例子的相关文章

python try小例子

#!/usr/bin/python import telnetlib import socket try: tn=telnetlib.Telnet('10.67.21.29',60000) except socket.error, e: print e exit(1) tn.set_debuglevel(1) tn.write('quit'+'\n') print 'ok' socket.error为错误类型 e为对象 python try小例子,布布扣,bubuko.com

python核心编程例子3.1

#!/usr/bin/env python # -*- coding:utf-8 -*- 'python核心编程例子3.1:makeTextFile.py -- create text file' import os import sys ls = os.linesep #获取当前平台使用的行终止符.Windows下返回'/r/n',Linux使用'/n'. while True: #按照书的逻辑,此处应该定义个fname,然后循环判断,但是书里没写. fname = raw_input('in

python print的例子

def progress(width, percent): print "%s %d%%\r" % (('%%-%ds' % width) % (width * percent / 100 * "="), percent), if percent >= 100: print sys.stdout.flush() 首先,先说明一下print的一些用法: 和C语言一样,字符串里的匹配使用‘%’和相关的转移类型组成的: 转换类型          含义 d,i  

Python 发邮件例子

Python 发邮件例子 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12:33 # @Author : BenLam # @Link : https://www.cnblogs.com/BenLam/ import smtplib from email.mime.text import MIMEText from email.header import Header from email.mi

python select和socket配合使用基础学习,是python标准库例子

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import select,socket,sys,Queue #作用:等待输入或者输出通道已经准备就绪的通知 #select模块允许访问特定平台的IO监视函数,可移植接口是POSIX函数select(),unix和windows都支持这个函数,poll()只支持unix,还有一些适用于unix特定变种选项 #select()是底层操作系统实现一个直接接口,会监视套接

Python random模块 例子

最近用到随机数,就查询资料总结了一下Python random模块(获取随机数)常用方法和使用例子. 1.random.random  random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 2.random.uniform random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限. 如果a < b,则生成的随机数n: b>= n >= a. 如果 a >b,则生成的随机数n: a

解读python手册的例子a, b = b, a+b

Python手册上有个例子,用于输出10以内的斐波那契序列.代码如下: 1 a, b = 0, 1 2 while b < 10: 3 print(b) 4 a, b = b, a+b 用到了一些Python的特性. 研究后解释下 第一行, a, b = 0, 1 赋值多个变量.等价 a = 0 , b = 1 第四行,a, b = b, a+b , 相当于 a=b , b = a+b 分析下执行过程 第一次循环 a = 0, b = 1 输出 b为1, 并计算后a = 1,b = 1 第二次循

python的_thread模块来实现多线程(&lt;python核心编程例子&gt;)

python中_thread模块是一个低级别的多线程模块,它的问题在于主线程运行完毕后,会立马把子线程给结束掉,不加处理地使用_thread模块是不合适的.这里把书中讲述的有关_thread使用的例子自己实现了一遍,做以记录. #例子一:自己手动在主线程中设置等待时间import _thread from time import ctime, sleep def loop0(): print("loop0 starts at:{}".format(ctime())) sleep(4)

Python 常用小例子

作者原文 https://mp.weixin.qq.com/s/eFYDW20YPynjsW_jcp-QWw 内置函数(63个) 1 abs() 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素都为真,那么返回True,否则返回False In [2]: all([1,0,3,6]) Out[2]: False In [3]: all([1,2,3]) Out[3]: True 3 any() 接受一个迭代器,如果迭代器里