1. 程式人生 > >Python和lua互相呼叫

Python和lua互相呼叫

本帖中用到的py模組是lupa,目前版本是1.7,通過pip可以直接安裝。說明一下,由於這個模組的文件非常少,只有幾個程式碼例子,所以以下所說都是根據已有的例子自己測出來的。如果有更好的辦法請回帖。

一、python呼叫lua,這個不用廢話了,照搬lupa在python社群的所有例子都可以,但要注意一點,整段的lua檔案程式碼,不能使用eval方法,一定會報錯。原因不多講了。整段lua程式碼的呼叫直接execute()

二、lua呼叫python,這就是亮點,也是坑貨。首先你不能在lua程式碼裡直接使用py的任何變數,如果要使用,需要通過eval來執行一個匿名定義,然後通過eval返回值(他是py的一個function)來當做py本地函式來呼叫。

廢話不多說,來個例子:

import lupa
from lupa import LuaRuntime
lua = LuaRuntime(unpack_returned_tuples=True)

def py_func(p):
    print p
    return 'hello '+str(p)

#execute無返回,打印出來是None
lua.execute('var_before=1;print(var_before);')

#eval返回的是一個lua call到py call的對映
pycall = lua.eval('function(pyfunc,param1) var_before=pyfunc(param1) end')

pycall(py_func,'world')

lua.execute('print(var_before)')

通過以上例子應該能看明白二者互相呼叫的方式。重要的事情多說幾遍,eval內部只能是匿名過程。所以要互相呼叫,目前我所知道的辦法就是頻繁的切換eval和execute來控制lua執行