有没有一种方法可以获取运行当前脚本的解释器的路径和名称?

我是指在 lua 不是作为嵌入到其他应用程序中的情况下运行的情况下。

我需要类似于 PHP_BINARYsys.executable 在 python 中的东西。在 LUA 中是否可能?

点赞
用户107090
用户107090

尝试使用 arg[-1]。但请注意,当使用交互方式执行 Lua 代码时,arg 尚未定义。

2013-08-16 09:49:06
用户2633423
用户2633423

注意,lhf 给出的解决方案并非最通用的。如果解释器使用了额外的命令行参数(如果这是你的情况),你将需要搜索 arg

通常,解释器名称存储在为 arg 定义的最负整数索引中。请参考这个测试脚本:

local i_min = 0
while arg[ i_min ] do i_min = i_min - 1 end
i_min = i_min + 1   -- so that i_min is the lowest int index for which arg is not nil

for i = i_min, #arg do
    print( string.format( "arg[%d] = %s", i, arg[ i ] ) )
end
2013-08-18 22:22:10
用户1334619
用户1334619

如果包含Lua解释器的目录在您的PATH环境变量中,并且通过文件名调用Lua解释器:

lua myprog.lua

那么 arg[-1] 包含的是 "lua" 而不是Lua解释器的绝对路径。

在z / OS UNIX上,下面的Lua程序对我有用:

- 打印运行此程序的Lua解释器的路径 posix = require("posix") stringx = require("pl.stringx") - 返回系统命令的输出,已修剪 功能系统(cmd) local f = assert(io.popen(cmd,“r”)) local s = assert(f:read("*a")) f:close() return stringx.strip(s) end - 获取当前进程的进程ID(运行此Lua程序的Lua解释器) local pid = posix.getpid("pid") - 获取此过程的可执行程序的“命令”(路径) 本地路径=系统(“ps-o comm = -p”.. pid) - 路径是否为符号链接? 本地symlink = posix.readlink(path) 如果symlink then print("Path(符号链接):".. path) print("符号链接参考:".. symlink) else print("路径(实际文件,而不是符号链接):"..路径) 结束

或者,在具有proc文件系统的UNIX操作系统上,您可以使用 readlink(“/ proc / self / exe”) 获取路径。

2014-09-17 08:51:58