有没有办法获取运行当前脚本的解释器的路径和名称?

时间:2013-08-16 09:05:56

标签: lua

我的意思是当lua运行时不是嵌入在另一个应用程序中而是作为独立的脚本语言。

我需要python中的PHP_BINARYsys.executable。这可能与LUA有关吗?

3 个答案:

答案 0 :(得分:4)

试试arg[-1]。但请注意,当Lua以交互方式执行时,arg未定义。

答案 1 :(得分:4)

请注意,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

答案 2 :(得分:0)

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

lua myprog.lua

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

以下Lua程序适用于z / OS UNIX:

-- Print the path of the Lua interpreter running this program

posix = require("posix")
stringx = require("pl.stringx")

-- Returns output from system command, trimmed
function system(cmd)
  local f = assert(io.popen(cmd, "r"))
  local s = assert(f:read("*a"))
  f:close()
  return stringx.strip(s)
end

-- Get process ID of current process
-- (the Lua interpreter running this Lua program)
local pid = posix.getpid("pid")

-- Get the "command" (path) of the executable program for this process
local path = system("ps -o comm= -p " .. pid)

-- Is the path a symlink?
local symlink = posix.readlink(path)

if symlink then
  print("Path (a symlink): " .. path)
  print("Symlink refers to: " .. symlink)
else
  print("Path (actual file, not a symlink): " .. path)
end

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