pika_lua.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import _pika_lua
  2. """
  3. PikaPython lua auto binging module
  4. - Import lua module as a python module
  5. ``` python
  6. import pika_lua
  7. # import lua module as a python module
  8. lua_math = pika_lua.require("math")
  9. # get vars from lua module
  10. print(lua_math.pi)
  11. # call lua function
  12. print(lua_math.sin(1))
  13. ```
  14. - Eval lua code
  15. ``` python
  16. import pika_lua
  17. # eval lua code
  18. print(pika_lua.eval("print(1 + 1)"))
  19. ```
  20. """
  21. def evals(cmd: str):
  22. return _pika_lua.evals(cmd)
  23. def evalLine(line: str):
  24. return _pika_lua.evalLine(line)
  25. def getVar(name: str):
  26. # print("getVar: %s" % name)
  27. return evals("return %s" % name)
  28. def setVar(name: str, value):
  29. # print("setVar: %s = %s" % (name, value))
  30. evals("%s = %s" % (name, value))
  31. class LuaModuleProxy:
  32. _name: str = ''
  33. def __init__(self, name: str):
  34. self._name = name
  35. def __getattr__(self, name: str):
  36. return getVar("%s.%s" % (self._name, name))
  37. def __setattr__(self, name: str, value) -> None:
  38. if (name == "_name"):
  39. setattr(self, name, value)
  40. else:
  41. setVar("%s.%s" % (self._name, name), value)
  42. def __proxy__(self, methodName, *args):
  43. strArgs = []
  44. for arg in args:
  45. strArgs.append(str(arg))
  46. return evals("return %s.%s(%s)" % (self._name, methodName, ",".join(strArgs)))
  47. def require(module: str) -> LuaModuleProxy:
  48. try:
  49. evals("require('%s')" % module)
  50. return LuaModuleProxy(module)
  51. except:
  52. print("require module '%s' failed" % module)
  53. return None