Notepad++ устанавливает неверный путь при запуске скрипта
У меня есть простой скрипт, который я хочу импортировать в другой с помощью require, но когда я запускаю его из Notepad++, я получаю обычную ошибку, которая выдает.
Самое смешное, что это сработало час назад, и с тех пор я не перезагружал компьютер.
Файлы находятся в одном каталоге, поэтому простое имя файла (без.lua) сработало и должно работать. (относительный путь)
Луа прекрасно запускает сценарий.
это то, что я ввел в блокноте: cmd /k lua "$(FULL_CURRENT_PATH)"
Ранее у меня также была проблема с Penlight, может быть, есть какое-то соединение, вот оно: я пытался потребовать "pl", но не смог найти модуль. (бежал от SciTE, работал превосходно) Я попробовал это в командной строке Lua, и это сработало как шарм. Попробовал еще раз в SciTE и вуаля снова заработало.
Я понятия не имею, что вызывает любой из них.
PS: с помощью модуля lfs и os.execute("cd /d ...path...") не работает
1 ответ
Lua ищет нужный вам модуль в папках LUA_PATH. В сценарии, который вы запускаете через F5, поместите этот оператор:
print('current path is:')
os.execute('cd')
require 'someModuleThatDoesntExist'
После печати "работающего" фордера (Program Files/Notepad++) он пытается найти нужный модуль и завершается неудачно. Трассировка показывает, что Lua просматривает много разных папок, ни одна из которых не содержит папку, содержащую FULL_CURRENT_PATH, поэтому он не может найти модуль.
У вас есть несколько вариантов:
- поместите ваши сценарии в один из перечисленных путей
- установите LUA_PATH в вашей среде, чтобы она содержала имя папки, в которой находятся ваши скрипты
- Измените package.path из своего скрипта, чтобы он знал, где искать другие модули. Вы можете сделать это одним из следующих способов:
- включая дополнительный параметр для вашего F5, а именно CURRENT_DIRECTORY, и заставьте ваш скрипт использовать свой первый параметр командной строки (CURRENT_DIRECTORY), чтобы добавить его в package.path
- При запуске скрипта проанализируйте arg[0], чтобы получить папку, содержащую скрипт, и расширьте package.path.
Например, с #3, первый вариант, вы бы использовали
cmd /k lua "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)"
в Notepad ++ и в вашем модуле Lua вы бы использовать
thisModuleDir = arg[1]
package.path = thisModuleDir .. ";" .. package.path
require 'yourmodule'