Как прочитать файл данных на пути пакета на Lua 5.1?Как прочитать файл данных в пути пакета на Lua 5.1
То, что я ищу, является чем-то вроде io.read
, но в каталоге пакета вместо рабочего каталога (arg[0]
) и без использования жестко закодированных абсолютных путей. Это было бы что-то вроде dofile
, но без запуска кода, только чтение его как строки.
Пример:
У меня есть test
папку, текущий рабочий каталог test.lua
сценария.
В другом каталоге, где-то указанном в переменной LUA_PATH
, есть пакет luapackage
.
luapackage
может:
require("luapackage.other_module")
;dofile("other_module.lua")
.
Но luapackage
не может сделать:
io.read("data.txt")
io.read("luapackage/data.txt")
Пример структуры:
+-test/
|
+-test.lua
+-luamodule/
|
+-data.txt
|
+-luamodule.lua
|
+-other_module.lua
Для этого примера, test.lua
требует только luamodule
:
-- test.lua
local luamodule = require("luamodule")
И luamodule
нужно прочитать его модули и файлы данных:
-- luamodule.lua
local other_module= dofile("other_module.lua") -- works
-- local other_module= require("luamodule.other_module") -- also works
local data = io.open("data.txt") -- fails
-- local data = io.open("luamodule/data.txt") -- also fails
Это не работает, потому что он ищет файл в рабочем каталоге (test
), а не каталог пакетов.
Если я поместил копию пакета в папку запуска скрипта, возможно io.read(luapackage/data.txt)
. Но каждый скрипт должен был иметь свою собственную локальную копию luapackage
.
Примечание: Я ищу решение Lua, избегая бинарных пакетов, которые могут поставить под угрозу кросс-совместимость.
Большое спасибо! 'local PATH = string.match (debug.getinfo (1," S "). Source,"^@ (. + /) [% A% -% d_] +%. Lua $ ")' и * voilà *! –