专栏首页AIUAIPython - 调用Lua

Python - 调用Lua

Python 调用Lua

lupaLuaLuaJIT2集成进CPython,可以在Python中执行Lua代码.

Lupa的主要特点: - separate Lua runtime states through a LuaRuntime class - Python coroutine wrapper for Lua coroutines - iteration support for Python objects in Lua and Lua objects in Python - proper encoding and decoding of strings (configurable per runtime, UTF-8 by default) - frees the GIL and supports threading in separate runtimes when calling into Lua解决了GIL问题,支持多线程 - tested with Python 2.6/3.2 and later 适用于Python 2.6/3.2以后的版本 - written for LuaJIT2 (tested with LuaJIT 2.0.2), but also works with the normal Lua interpreter (5.1 and 5.2) - easy to hack on and extend as it is written in Cython, not C 扩展性好

1. lupa安装

这里基于Ubuntu14.04. lupa官网提供的教程:

# ForDebian/Ubuntu + Lua 5.2
sudo apt-get install liblua5.2-dev  # Install Lua 5.2 development package
sudo pip install lupa  # Install lupa

# For Debian/Ubuntu + LuaJIT2
sudo apt-get install libluajit-5.1-dev  # Install LuaJIT2 development package
sudo pip install lupa  # Install lupa

源码安装方式如下:

1.1 安装lua环境

curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
tar zxf lua-5.3.4.tar.gz
cd lua-5.3.4
make linux test
make install

注:如果遇到错误:fatal error: readline/readline.h: No such file or directory,则需要安装readline-dev

sudo apt-get install libreadline-dev

测试是否安装成功: 新建 hellolua.lua脚本,代码如下:

print("Hello Lua!")

执行命令:

lua hellolua.lua

安装成功,则输出:

Hello Lua!

1.2 安装LuaJIT

wget -c http://luajit.org/download/LuaJIT-2.0.5.tar.gz

tar zxf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5
sudo make install PREFIX=/usr/local/luajit
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
sudo ldconfig

export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

1.3 lupa安装

sudo pip install lupa

2. 实例

基本用法

import lupa
from lupa import LuaRuntime

lua = LuaRuntime(unpack_returned_tuples=True)
lua.eval('1+1') # output: 2

lua_func = lua.eval('function(f, n) return f(n) end')

def py_add1(n): 
    return n+1

lua_func(py_add1, 2) # output: 3

lua.eval('python.eval(" 2 ** 2 ")') == 4 # output: True

lua.eval('python.builtins.str(4)') == '4' # output: True

# lua_type(obj) 函数用于输出 type of a wrapped Lua object
lupa.lua_type(lua_func) # output: 'function'
lupa.lua_type(lua.eval('{}')) # output: 'table'
lupa.lua_type(123) is None # output: True
lupa.lua_type('abc') is None # output: True
lupa.lua_type({}) is None # output: True

# flag unpack_returned_tuples=True that is passed to create the Lua runtime
lua.execute('a,b,c = python.eval("(1,2)")')
g = lua.globals()
g.a   # output: 1
g.b   # output: 2
g.c is None   # output: True

# flag unpack_returned_tuples=False, functions that return a tuple pass it through to the Lua code
non_explode_lua = lupa.LuaRuntime(unpack_returned_tuples=False)
non_explode_lua.execute('a,b,c = python.eval("(1,2)")')
g = non_explode_lua.globals()
g.a   # output: (1, 2)
g.b is None  # output: True
g.c is None  # output: True

更多用法参考lupa官网.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分类算法总结

    (本文来自网上,具体出处不可查,此处转载,以备后查,请原作者见谅) 分类算法总结: -------------------------------...

    AIHGF
  • Caffe2 - (十)训练数据集创建

    caffe2 使用二值 DB 存储模型训练的数据,以 key-value 格式保存,

    AIHGF
  • Opencv - Contours 属性及操作 Python API

    cv2.findContours函数输入有三个参数: - thresh: source image - cv2.RETR_TREE: 轮...

    AIHGF
  • Lua学习笔记

    --Lua笔记-- --0.Lua开篇-- --http://www.cnblogs.com/stephen-liu74/archive/2012/06/11/...

    _gongluck
  • “史上最全PyTorch资源汇总”:教程、实战、必读论文、中文教材一应俱全

    这是GitHub上的一个新项目,简介如是说:史上最全的PyTorch学习资源汇总。

    代码医生工作室
  • “史上最全PyTorch资源汇总”:教程、实战、必读论文、中文教材一应俱全

    这是GitHub上的一个新项目,简介如是说:史上最全的PyTorch学习资源汇总。

    量子位
  • linux封装rm -rf指令,防止误删

    对于一个linux新手,敲错指令是常有的事情,智者千虑必有一失,即使对于一个老司机来说,也难免会有操作失误的时候,而误删导致的后果往往是无法弥补的。与其在误删数...

    技术小工
  • linux封装rm -rf指令,防止误删(转)

    对于一个linux新手,敲错指令是常有的事情,智者千虑必有一失,即使对于一个老司机来说,也难免会有操作失误的时候,而误删导致的后果往往是无法弥补的。与其在误删数...

    wuweixiang
  • 应用服务器到底是个啥?| 从开发角度看应用架构2:对Java EE应用进行打包和部署!

    魏新宇
  • 【项目实战】自监控-05-弹窗交互

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia

扫码关注云+社区

领取腾讯云代金券