使用Python运行lua脚本前,需要先安装LuaJIT,LuaJIT的官网是下载 (luajit.org)

目前已不再使用.exe文件的下载方式,需要使用Git从公共仓库下载源码,git命令为:

  $ git clone https://luajit.org/git/luajit.git

下载后源码文件夹会保存到git设置的路径下 ,随后再打开官网的安装教学界面安装 (luajit.org)

  根据官网提示,Windows平台需要使用Visual Studio、MinGW 或 Cygwin 程序构建,我用的Visual Studio。打开Visual Studio后跳过建立项目界面 ,打开开发者命令提示。

 安装luajit及使用python运行lua脚本-LMLPHP

随使用命令cd到下载后luajit文件夹的src路径

cd C:\......(自己的下载路径)\luajit\src

 随后输入命令构建程序

mingw32-make

完成后,src文件夹会多出luajit.exe文件和lua51.dll,随便一个顺眼的地方新建一个LuaJIT文件夹,将luajit.exe文件和lua51.dll复制进去,再新建一个lua文件夹,把jit文件夹复制进去

安装luajit及使用python运行lua脚本-LMLPHP

把LuaJIT文件夹的路径添加到环境变量的系统变量path中

安装luajit及使用python运行lua脚本-LMLPHP

 添加完成后按win+r打开,输入cmd,在cmd中输入:

luajit 

安装luajit及使用python运行lua脚本-LMLPHP

LuaJIT安装完成。

开始编写一个lua脚本,我从《lua程序设计》这本书中挑选了一个很经典的八皇后问题的代码抄上去,编写完成后运行一下检查是否存编译问题并保存为.lua文件:

N = 8

function isplaceok(a, n, c)
    for i = 1, n - 1 do
        if (a[i] == c) or
        (a[i] - i == c - n) or
        (a[i] + i == c + n) then
            return false
        end
    end
    return true
end

function printsolution(a)
    for i = 1, N do
        for j = 1, N do
            io.write(a[i] == j and "X" or "-", " ")
        end
        io.write("\n")
    end
    io.write("\n")
end

function AoLiGei(a, n)
    if n > N then
        printsolution(a)
    else
        for c = 1, N do
            if isplaceok(a, n, c) then
                a[n] = c
                AoLiGei(a, n + 1)
            end
        end
    end
end

AoLiGei({}, 1)

随后编写python代码,使用subprocess 包调用 LuaJIT 执行指定的 Lua 脚本,再添加一些错误处理功能来捕获任何可能出现的异常:

import subprocess  
import os  

"""
刚才编写的lua脚本保存名字为岛市老八.lua
subprocess.run(['luajit', '岛市老八.lua'], check=True) 可以直接运行
"""
 
# 脚本路径  
lua_script_path = './老八秘制小汉堡/岛市老八.lua'  
  
# 检查Lua脚本是否存在  
if not os.path.exists(lua_script_path):  
    print(f"Error: Lua script not found at {lua_script_path}")  
else:  
    try:  
        # 使用subprocess调用LuaJIT执行Lua脚本  
        result = subprocess.run(['luajit', lua_script_path], check=True, capture_output=True, text=True)  
          
        print("Lua script output:")  
        print(result.stdout)  
          
    except subprocess.CalledProcessError as e:  
        # 如果LuaJIT执行失败,打印错误信息  
        print(f"Error executing Lua script: {e}")  
        print(f"Lua script returned non-zero exit code: {e.returncode}")  
        print(f"Lua script stderr output: {e.stderr}")  
    except Exception as e:  
        print(f"An unexpected error occurred: {e}")

简化一下:

import subprocess  
  
try:  
    subprocess.run(['luajit', '岛市老八.lua'], check=True)  
except FileNotFoundError as e:  
    print("找不到文件或命令:", e)  
except PermissionError as e:  
    print("权限错误:", e)  
except Exception as e:  
    print("发生错误:", e)

安装luajit及使用python运行lua脚本-LMLPHP

输出正常。 

02-18 17:22