Notepad++ устанавливает неверный путь при запуске скрипта

У меня есть простой скрипт, который я хочу импортировать в другой с помощью require, но когда я запускаю его из Notepad++, я получаю обычную ошибку, которую производит require.

Самое смешное, что это сработало час назад и с тех пор я не перезагружала компьютер.

Файлы находятся в одном каталоге, поэтому простое имя файла (без .lua) работало и должно работать. (относительный путь)

Lua отлично запускает скрипт.

это то, что я ввел в блокноте: cmd /k lua "$(FULL_CURRENT_PATH)"

Раньше у меня тоже была проблема с Penlight, может быть есть какая-то связь, так вот: я пытался потребовать "pl", но он не смог найти модуль. (запустился из SciTE, раньше работало) Я попробовал это в командной строке Lua, и это сработало как шарм. Попробовал еще раз в SciTE и вуаля, все снова заработало.

Я понятия не имею, что вызывает любой из них.

PS: использование модуля lfs и os.execute("cd /d ...path...") не сработало


person user1896037    schedule 07.12.2013    source источник
comment
какую ошибку вы получаете при запуске cmd/k lua $(FULL_CURRENT_PATH)?   -  person Oliver    schedule 07.12.2013
comment
Я запускаю его из NPP с F5 и получаю это (примерно): lua: ...path... :line: module module_name not found: ...здесь перечислены пути по умолчанию, которые он ищет... (единственное интересное один из них:) нет файла '.module_name.lua', он находится в том же каталоге, поэтому я не знаю   -  person user1896037    schedule 07.12.2013


Ответы (1)


Lua ищет нужный модуль в папках LUA_PATH. В сценарии, который вы запускаете через F5, поместите этот оператор:

print('current path is:')
os.execute('cd')
require 'someModuleThatDoesntExist'

После печати "рабочей" папки (Program Files/Notepad++) она пытается найти нужный модуль и терпит неудачу. Трассировка показывает, что Lua просматривает множество разных папок, ни одна из которых не содержит FULL_CURRENT_PATH, поэтому модуль не может быть найден.

У вас есть несколько вариантов:

  1. поместите свои скрипты в один из перечисленных путей
  2. установите LUA_PATH в вашей среде, чтобы он содержал имя папки, в которой находятся ваши скрипты
  3. change package.path from your script so it knows where to look for other modules. You could do this by either:
    • including an extra parameter to your F5, namely CURRENT_DIRECTORY, and make your script take its first command line param (CURRENT_DIRECTORY) to add it to package.path
    • проанализируйте arg[0] при запуске вашего скрипта, чтобы получить папку, содержащую скрипт, и расширить package.path

Например, с # 3, первый вариант, вы должны использовать

cmd /k lua "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)"

в блокноте ++ и в вашем модуле Lua, который вы бы использовали

thisModuleDir = arg[1]
package.path = thisModuleDir .. ";" .. package.path
require 'yourmodule'
person Oliver    schedule 07.12.2013
comment
да, это должно работать, но я до сих пор не понимаю, почему он работает 8 раз, если 10, и терпит неудачу в оставшихся 2, и он не всегда меняет путь, я проверил это с помощью os.executecd и lfs.currentdir как ну, и когда я использовал lfs, это сработало. Я не перезапускал NPP, я просто добавил: print(require(lfs).currentdir()) и внезапно он нашел все в каталоге ps.: Я знаю, где ищет Lua, мне нужен способ найти файлы в тот же каталог, где находится скрипт - person user1896037; 09.12.2013
comment
@user1896037 user1896037 Техника № 3 — это то, что вы бы использовали. Смотрите отредактированный ответ. - person Oliver; 13.12.2013