5

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

我需要类似PHP_BINARYsys.executable在python中的东西。LUA 有可能吗?

4

3 回答 3

4

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

于 2013-08-16T09:49:06.650 回答
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
于 2013-08-18T22:22:10.807 回答
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")来获取路径。

于 2014-09-17T08:51:58.957 回答