包含当前文件路径的Lua全局变量?

时间:2014-01-28 21:04:24

标签: module lua filesystems filenames interpreter

Lua中是否有一个全局变量包含当前正在解释的文件的路径?像Python的__file__变量?

我在翻译中快速for k, v in pairs(_G) do print(k) end,看看能不能找到任何东西。只列出了以下变量?

string xpcall package tostring print os unpack require getfenv setmetatable next assert tonumber io rawequal collectgarbage getmetatable module rawset math debug pcall table newproxy type coroutine _G select gcinfo pairs rawget loadstring ipairs _VERSION dofile setfenv load error loadfile

有关如何获取当前正在执行的文件的路径的任何建议?

3 个答案:

答案 0 :(得分:7)

调试库有一个可以调用的getinfo方法,可以返回函数的源文件等。

local info = debug.getinfo(1,'S');
print(info.source);

这将返回调用堆栈第一级函数的源文件名(以@符号开头,表示它是文件名)。通过1,您要求提供有关当前功能的信息。如果您传入0,则会返回=[C],因为它会返回有关getinfo函数本身的信息。

有关更多详细信息,请查看官方Lua网站上的Programming in Lua参考: http://www.lua.org/pil/23.1.html

答案 1 :(得分:6)

在Lua 5.2中,当通过require加载脚本时,它接收作为参数的require给出的模块名称和require用于打开脚本的文件名:

$ cat a.lua
require"b"
$ cat b.lua
print("in b",...)
$ lua a.lua
in b    b   ./b.lua

在Lua 5.1中,只传递模块名称,而不是文件名。

答案 2 :(得分:3)

回答lhf的回答:
作为Lua的新手,我最初对...的意思感到困惑。事实证明它与ANSI C:https://www.lua.org/manual/5.3/manual.html#3.4一样是一种变体。根据我使用lua 5.3的经验,使用

local packageName, packagePath = ...

获取包名称,如在require和包的绝对文件路径中使用的那样。