为Zope提供Lua支持——兼Plone功能扩展方法
2013-03-31 11:23
399 查看
为Zope提供Lua支持
本贴旨在说明如何为Zope提供Lua支持,即使得Zope中的Python脚本可以调用Lua格式的配置文件,甚或可以直接调用Lua脚本命令,从而为Zope提供更强大的功能。一、Lua简介
Lua是一种为支持有数据描述机制的一般过程式编程语言而设计的扩展编程语言。它同样可以对面向对象语言、函数式程序设计以及数据驱动编程提供很好的支持。做为一种嵌入式脚本语言,Lua非常小,速度很快,功能却非常强大。
任何一种语言的存在都是为了表达,作为一个扩展语言,Lua提供给我们非常强大也非常的灵活的表达方式。Lua没有"Main"函数的概念:它仅仅是嵌入一个宿主程序进行工作,可以称之为 嵌入式编程 或者简单的说是 宿主编程。这个宿主程序可以调用函数来执行Lua的代码片断,可以设置和读取Lua的变量。Lua的能力可以扩展到更大范围,在不同的领域内,这样就在同样的语法框架下创建了你自定义的编程语言。
Lua的一个重要的应用是做为一个配置语言。通常来说,对于应用程序中一些易变的数据,我们需要一种灵活的处理方式来支持它的改变,这种改变可以在运行时发生。有很多方法可以做到这一点,你可以选择通常的文本文件,ini文件,环境变量等等。Lua做为一种配置语言,可以提供给你更为强大和更为灵活的表达能力。
使用Lua作为配置语言会给我们带来如下优势:
1、使用Lua做为配置语言,由Lua处理所有的语法检查和错误处理。你的配置文件甚至可以有注释。
2、用户可以写出更为复杂,更为灵活的配置来,甚至可以根据运行时的某个状态来确定配置。
3、预期未来的配置是困难的,然而使用Lua可以让你的程序更容易的接受变化,使你的程序更有弹性。
二、Lua的安装
将Lua的源码包lua-5.0.tar.gz上传到服务器上之后解压缩,然后在源码目录下键入如下命令:
# make # make install
即可完成Lua的安装过程。
安装结束后,Lua的相关文件将拷贝到系统目录中,具体如下所示:
cp bin/* /usr/local/bin cp include/*.h /usr/local/include cp lib/*.a /usr/local/lib cp doc/*.1 /usr/local/man/man1
三、lunatic-python的安装
lunatic-ptyhon是Python和Lua之间的双向桥梁,允许这两种语言进行交互。“双向”就意味着既可以在python中使用Lua,也在Lua中使用Python。
将lunatic-ptyhon的产品包lunatic-python-1.0.tar.bz2上传到服务器上之后解压缩,这里需要注意下,该产品包的压缩格式为.tar.bz2,而不是常见的.tar.gz格式,因此解压缩参数也不再是常见的“tar -xzvf *.tar.gz”,而应使用“tar -jxvf *.tar.bz2”。
解压缩之后在产品目录下键入如下命令:
# python setup.py install
即可完成该产品的安装过程。
安装结束后,该产品的源码库将被拷贝系统目录中,具体如下所示:
copying build/lib.linux-i686-2.4/lua-python.so -> /usr/local/lib/python2.4/site-packages copying build/lib.linux-i686-2.4/lua.so -> /usr/local/lib/python2.4/site-packages
更多的lunatic-ptyhon说明参见此链接
四、产品测试
按如下步骤进行测试,如果可以得到正确的结果,既说明Lua和lunaitc-python均已正确安装。
[root@localhost /]# python Python 2.4.1 (#1, Jul 12 2005, 14:19:15) [GCC 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import lua >>> lg = lua.globals() >>> lg.string <Lua table at 0x9279148> >>> lg.string.lower <Lua function at 0x9279268> >>> lg.string.lower("Hello World!") 'hello world!'
五、应用范例
本范例中我们要读取的是物流跟踪系统的物流过程采集记录,该采集记录中含采集时间、采集模式、采集类型、采集代码以及采集备注。
出于安全性的考虑,zope禁止用户在网站的ZMI页面下对文件系统进行操作,因此我们只能建立一个External Method来实现读取Lua配置文件。然后在网站的ZMI页面下添加相应的External Method即可在所需页面中调用该方法。
外部方法(External Method):
ID | ParseLogisticsLog |
Module Name | ParseLogisticsLog |
Function Name | ParseLogisticsLog |
Source Code
|
应用范例:
ID | test_UploadLua |
Source Code
|
ID | test_ShowLua |
Parameter List | upload |
Source Code
|
来源:http://write.blog.csdn.net/postedit/8742344
相关文章推荐
- artDialog对话框组件使用心得,其功能完善,接口友好,提供多套皮肤,支持iframe跨页面扩展
- quick-Cocos2d/framework/functions.lua(提供了我们在Lua中创建一个自定义类的快捷方法class、克隆等功能)
- BOOST模板库实现的功能与lua在语言层级提供的支持之比较
- 地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类
- 使用JQuery库提供的扩展功能实现自定义方法
- 使用JQuery库提供的扩展功能实现自定义方法
- 动态扩展Nginx支持Lua功能
- 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
- PHPnow开启PHP扩展里openssl支持的方法
- 写一个针对IQueryable<T>的扩展方法支持动态排序
- Win7提供文件反选功能的使用方法
- 扩展DropDownList控件和ListBox控件(1) - 支持分组功能(optgroup标签)
- 三个方法扩展Array删除功能
- PowerPoint功能扩展的几个常用方法
- lua5.2支持中文方法
- 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
- 基于Spring可扩展Schema提供自定义配置支持
- 转 ofbiz的webservice接口提供(4)-支持复杂数据类型方法
- 事件应用,为系统提供扩展功能
- quick-Cocos2d/framework/display.lua(这个组件提供的功能是很重要的,包括场景、层、精灵、动画这些游戏中必要的组件)