Путь к скриптам Lua

Страницы: 1
RSS
Путь к скриптам Lua
 
QUIK 8.7.1.3
У меня есть основной скрипт и еще несколько дополнительных, которые основной подключает через requare. Все скрипты расположены в отдельной папке но не внутри директирии QUIK (так нужно). При добавлении и запуске основного скрипта в QUIK все работает нормально, до момента пока QUIK не перезапускается. После перезапуска QUIK и попытке запуска скрипта получаю "module ... not found' с перечнем папок, где QUIK пытался искать подключаемый скрипт. Чтобы снова заработало нужно в окне "Lua скрипты" удалить мой основной скрипт и заново добавить.
Такое впечатление, что сразу после добавления скрипта к путям, по которым происходит поиск подключаемых скриптов добавляется папка из которой запускается скрипт, а после перезагрузки QUIK в этой папке уже не ищет.
Как можно исправить эту ситуацию? Добавить еще один путь для поиска скриптов, или указать, чтобы requare искал скрипты в папке нахождения основного скрипта?
 
Sergey, Такая проблема возникает, если загружаемый модуль расположен не в стандартных для скриптов папках, а пути к модулям не прописаны явно, либо прописаны по относительным путям.

Надо корректно прописать package.cpath и/или package.path

Вот вам для примера мой код подгрузки модуля из нестандартного места
Код
package.cpath=""
package.path=getScriptPath().."\\. .\\Modules\\?.lua"
require("mod_trading")
 
Цитата
Sergey написал:
Такое впечатление, что сразу после добавления скрипта к путям, по которым происходит поиск подключаемых скриптов добавляется папка из которой запускается скрипт, а после перезагрузки QUIK в этой папке уже не ищет.
Именно так и происходит, вот ответ поддержки на подобную проблему с путями к скриптам.

И этой проблеме, кстати, уже очень много лет... а воз и ныне там.
 
Цитата
Sergey написал:
У меня есть основной скрипт и еще несколько дополнительных, которые основной подключает через requare. Все скрипты расположены в отдельной папке но не внутри директирии QUIK (так нужно).

Указывайте полный путь к скриптам, тогда они всегда будут находиться.
Как - см. выше
 
Функция опреlеления папки запускаемого скрипта:

Код
-- Функция определения пути файла запускаемого скрипта ---
 -- Результат: если запуск файла, то путь файла; если строка, то результат nil   ---
function script_path() 
   local str 
   for i = 2, 10000 do  --- поиск корневой функции, вызывающей script_path, начиная с функции в которой вызвана script_path
 --     message (tostring(  debug.getinfo(i) ))
      if  debug.getinfo(i)  then   ---- 
        str = debug.getinfo(i, "S").source
     else
        break
     end
   end

   if  str:sub(1,1) ~= '@' then  ---- ! путь к файлу или имя пакета содержит символ '@'
      return  'Вызов строки'  ---   
   end
   if  not str: find ('\\', 1)  then  --- нет пути к файлу
      return str:sub(2)    --- имя пакета ---
   end
   --  выделение пути файла скрипта ----
   str = str:sub(2) 
   str = str:match('(.*[/\\])') or '.\\'
   str = str: sub(1, #str -1)
   return str
end
 
Спасибо, прописал, заработало.
 
Цитата
TGB написал:
Функция опреlеления папки запускаемого скрипта:
Аа чем getScriptPath() не устраивает?
 
Цитата
BlaZed написал:
Цитата
TGB написал:
Функция опреlеления папки запускаемого скрипта:
Аа чем getScriptPath() не устраивает?

Если файл запущен через dofile, то не покажет его расположение.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
BlaZed написал:
Аа чем getScriptPath() не устраивает?
 Согласен.  Правильнее использовать getScriptPath().
Страницы: 1
Читают тему
Наверх