我想知道是否有办法获取当前正在执行的lua脚本文件的路径?
这特别不是当前的工作目录,可能完全不同.我知道luafilesystem会让我获取当前的工作目录,但它似乎无法告诉当前正在执行的脚本文件.
谢谢
编辑:我没有从标准命令行解释器运行,我正在通过luabind从C++二进制文件执行脚本.
ant*_*ore 15
这是一种更优雅的方式:
function script_path()
local str = debug.getinfo(2, "S").source:sub(2)
return str:match("(.*/)")
end
print(script_path())
Run Code Online (Sandbox Code Playgroud)
我发现的最短形式如下所示:
debug.getinfo(1).source:match("@?(.*/)")
Run Code Online (Sandbox Code Playgroud)
索引 1、2-其他 - 取决于您要查询调用堆栈中的哪个函数。1 是最后调用的函数(您所在的位置)。如果你在全局上下文中运行,那么可能 2 更合适(我自己没有测试过)
如果Lua脚本由标准命令行解释器运行,那么请尝试arg[0].
正如 lhf 所说:
~ e$ echo "print(arg[0])" > test.lua
~ e$ lua test.lua
test.lua
~ e$ cd /
/ e$ lua ~/test.lua
/Users/e/test.lua
/ e$
Run Code Online (Sandbox Code Playgroud)
这是使用 debug.getinfo 机制的相同信息
~ e$ echo "function foo () print(debug.getinfo(1).source) end; foo()" > test.lua
~ e$ lua test.lua
@test.lua
~ e$ cd /
/ e$ lua ~/test.lua
@/Users/e/test.lua
/ e$
Run Code Online (Sandbox Code Playgroud)
这可以从 C API lua_getinfo 获得