Python和lua互相呼叫
阿新 • • 發佈:2018-12-18
本帖中用到的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執行