myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> Скрипты И Совметимость Операционных Систем, Рабочие файлы скриптов в Unix системах

mariner
сообщение 4.11.2008, 23:03
Сообщение #1


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 868
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 177 раз




Собственно перешел я на Linux и послал венды куда-подальше. Ну и вылез вопросец со скриптами, ибо пути в Unix системах немного отличаются от аналогичных в Windows. В результате был загажен немного рут. Но дело даже не в этом. Некоторые скрипты, к примеру RSS лент, отлично пашут и не гадят своими файлами. Поэтому предлагаю нашим разработчикам подумать над этой проблемой и выбрать отптимальный код для совместимости операционок.

2 Setuper: Илья, тестовую площадку подготовлю, если что big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 11.11.2008, 0:20
Сообщение #2


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Проблема совместимости некоторых скриптов заключается в путях к файлам и директориям.

Windows вообще говоря использует в путях как прямые (/), так и обратные слеши (\).
Unix'ы в путях используют только прямые слеши (/).

Отсюда возникает проблема совместимости скриптов на Windows и Unix системах.


Предлагаю эту проблему совместимости решать следующим образом:

В путях писать только прямые слеши:
Например, для API 2:
Код
dofile(Core.GetPtokaXPath().."scripts/file.lua")
Для API 1:
Код
dofile(frmHub:GetPtokaXLocation().."scripts/file.lua")

(функции Core.GetPtokaXPath() и frmHub:GetPtokaXLocation() возвращают пути с прямыми слешами)

При использовании той, или иной консольной команды (mkdir, rmdir и тд.) путь в параметре этой команды нужно заключать в двойные кавычки, тогда путь может содержать только прямые слешы, что как раз будет соответствовать предложенному принципу совместимости.

Предлагаю разработчикам учесть этот факт и писать универсальные скрипты, совместимые с обеими системами windows и unix!!!


Самый универсальный, кроссплатформенный и кроссхабный метод определения абсолютных путей:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"


Спасибо сказали:
Go to the top of the page
+Quote Post
mariner
сообщение 11.11.2008, 1:29
Сообщение #3


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 868
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 177 раз




грасиас
Go to the top of the page
+Quote Post
Setuper
сообщение 14.12.2008, 22:18
Сообщение #4


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Я тут ещё раз проверил... Толи глики у меня какие-то, то ли не знаю...

Проверти кто-нибудь создаёт ли данный скрипт папку test folder и вложенную в неё папку test folder2 ???
Код
function OnStartup()
  sPath = Core.GetPtokaXPath().."scripts/"
  os.execute("md \""..sPath.."test folder/test folder2\"")
end
function Main()
  sPath = frmHub:GetPtokaXLocation().."scripts/"
  os.execute("md \""..sPath.."test folder/test folder2\"")
end


У меня создаёт, хотя из моего топика выше у меня раньше не создавал...
Если это так, то можно писать везде только прямые слеши!
Go to the top of the page
+Quote Post
Sephiroth_Lukaw
сообщение 14.12.2008, 22:26
Сообщение #5


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 336
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 27 раз




API2 - Да.
API1 - Нет.
upd. Cорри, API1 при запущенном хабе, тоже.
Go to the top of the page
+Quote Post
Setuper
сообщение 14.12.2008, 22:34
Сообщение #6


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Спасибо, поправил мой пост. Для совместимости с обеими системами и win и unix достаточно писать пути используя функции Core.GetPtokaXPath() для API 2 и frmHub:GetPtokaXLocation() для API 1, и во всех путях следует писать только прямые слеши.

Соответственно для создания папок в аргументе команды пишутся также прямые слеши))

В команде удаления папки или файла в системе windows писать нужно обратные слеши!
Go to the top of the page
+Quote Post
Wariner
сообщение 16.2.2009, 22:05
Сообщение #7


Младший Админ
************

Группа: Модераторы
Сообщений: 2 901
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 390 раз




Снова поднимаю эту тему. По словам одного из пользователя линукса и моего бота на линуксе некорректно работают некоторые функции, конкретно работы с файлами.
В приветственном соообщении каждая строчка текста разделяется пустой строчкой! Вот функции
Код
function ShowHalloMessage(tUser)              
    Core.GetUserAllData(tUser)
    local sProfile = ""
    if CheckOwner(tUser) then
        sProfile = "Owner"
    else    
        sProfile = tProfiles[tUser.iProfile][4]
    end    
    local HalloText = loadtextfiles(sText.."hallo.txt");
    HalloText = string.gsub(HalloText, "%[USER%]", tUser.sNick)
    HalloText = string.gsub(HalloText, "%[IP%]", tUser.sIP)
    HalloText = string.gsub(HalloText, "%[HUB%]", SetMan.GetString(0))
    HalloText = string.gsub(HalloText, "%[BOTNAME%]", sBot)
    HalloText = string.gsub(HalloText, "%[USERA%]", Core.GetUsersCount()+1)
    HalloText = string.gsub(HalloText, "%[VERSION%]", "Ptokax "..Core.Version)
    HalloText = string.gsub(HalloText, "%[ACTUALPEAK%]", Core.GetActualUsersPeak())
    HalloText = string.gsub(HalloText, "%[MAXPEAK%]", tStat.MaxUsers)
    HalloText = string.gsub(HalloText, "%[MAXSHARA%]", GetNormalShare(tStat.MaxShara))
    HalloText = string.gsub(HalloText, "%[SHARKA%]", GetNormalShare(Core.GetCurrentSharedSize()+tUser.iShareSize))
    HalloText = string.gsub(HalloText, "%[SHARE%]", GetNormalShare(tUser.iShareSize))
    HalloText = string.gsub(HalloText, "%[MSGS%]", tUsers[tUser.sIP].Msg)
    HalloText = string.gsub(HalloText, "%[TIMES%]", GetNormalTime(tUsers[tUser.sIP].Time,1))
    HalloText = string.gsub(HalloText, "%[ROLE%]", sProfile)
    HalloText = string.gsub(HalloText, "%[SHARARECORD%]", GetNormalShare(tStat.MaxShara))
    HalloText = string.gsub(HalloText, "%[USERRECORD%]", tStat.MaxUsers)
    Core.SendToNick(tUser.sNick,HalloText)    
end


Код
function loadtextfiles(filename)
    local message = ""
    local f = io.open( filename, "r" )
    if f then
        message=f:read("*all")
        message=string.gsub(message,"|","")
        message=string.gsub(message,"\n","\r\n")
        f:close()
    end
    return message
end



upd: проблема решилась удалением строки:
Код
message=string.gsub(message,"\n","\r\n")


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 17.2.2009, 0:44
Сообщение #8


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Вообще говоря \r - это возврат каретки, \n - это перенос на следующую строку. Смысл заменять перенос строки на возврат каретки с переносом строки не ясен. Это же лишнее действие. Замена вертикальной черты тоже не совсем понятна, так как черту надо заменять на код этой черты.

Код
function loadtextfiles(filename)
    local f,message = io.open(filename)
    if f then
        message=f:read"*a"
        message=message:gsub("|","&#*124;")
        f:flush()
        f:close()
    end
    return message
end

* между &# и 124; удалить!
Go to the top of the page
+Quote Post
PomanoB
сообщение 17.2.2009, 20:42
Сообщение #9


AmxModx Scripter
*****

Группа: Пользователи
Сообщений: 301
Регистрация: 2.12.2008
Из: Королев
Пользователь №: 1 283
Спасибо сказали: 119 раз




В Unix для разделения строк используется \n а в Windows \r\n, отсюда и лишние пустые строки
Go to the top of the page
+Quote Post
Setuper
сообщение 17.2.2009, 21:10
Сообщение #10


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




в виндовсе возврат каретки вовсе необязательное действие, оно обязательно только в случае работы с окнами.
Go to the top of the page
+Quote Post
Sekas
сообщение 22.2.2009, 11:13
Сообщение #11


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 22.2.2009
Пользователь №: 2 310
Спасибо сказали: 0 раз




Приветствую а как быть простому пользователю, который не разбирается в коде для определения совместим тот или иной плагин под Linux или нет? Пересматривать каждую строчку кода скриптов или ставить каждый плагин для проверки мягко говоря не очень удобный вариант. Может быть имеется список совместимых плагинов? Если его нету, то можно его создать совместными усилиями. Думаю многим это понадобится и избавит от необходимости уточнять этот вопрос в топике каждого плагина по отдельности.
Go to the top of the page
+Quote Post
Wariner
сообщение 22.2.2009, 11:16
Сообщение #12


Младший Админ
************

Группа: Модераторы
Сообщений: 2 901
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 390 раз




В начале темы ясно написано что различия только в путях, список чего ты хочешь создавать?!
Go to the top of the page
+Quote Post
Sekas
сообщение 22.2.2009, 11:20
Сообщение #13


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 22.2.2009
Пользователь №: 2 310
Спасибо сказали: 0 раз




Цитата
В начале темы ясно написано что различия только в путях, список чего ты хочешь создавать?!

Как я понял из вышенаписанного, бывают случаи когда различие не только в путях. Список плагинов совместимых с *NIX системами из "коробки", в которые не надо лезть ручками и допиливать самому даже пускай такую мелочь, как пути.

Цитата
В Unix для разделения строк используется \n а в Windows \r\n, отсюда и лишние пустые строки
Go to the top of the page
+Quote Post
Setuper
сообщение 22.2.2009, 13:19
Сообщение #14


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Ну это уже зависит от разработчиков скриптов. Я приверженец написания универсальных, кросс платформенных скриптов. Однако некоторые скриптописатели принципиально не хотят писать универсальные скрипты, мотивируя это усложнением читаемости кода.
Go to the top of the page
+Quote Post
valdis73
сообщение 30.3.2009, 13:01
Сообщение #15


Активный участник
***

Группа: Пользователи
Сообщений: 92
Регистрация: 4.1.2009
Пользователь №: 1 670
Спасибо сказали: 4 раза




Единственное непонял исправлять слеши во всём скрипте и нужно ли переписывать всю базу. Скажем на примере гостевой книги покажи что нужно исправить плиз
Причина редактирования: Не надо постить такой огромный код!!! Прикрепляй файлом!!!

Прикрепленные файлы
Прикрепленный файл  GuestBook_newapi.lua ( 9.19 килобайт ) Кол-во скачиваний: 8
 
Go to the top of the page
+Quote Post
Wariner
сообщение 30.3.2009, 13:38
Сообщение #16


Младший Админ
************

Группа: Модераторы
Сообщений: 2 901
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 390 раз




заменить надо следующие строчки:
Код
path = Core.GetPtokaXPath().."scripts/dats" -- имя папки

gbfile=path.."/guestbook.dat" --имя файлв

nfile=path.."/news.dat" -- директория для файла

rfile=path.."/requests.dat" -- директория для файла

os.execute("mkdir ".."\""..path.."\"")
Go to the top of the page
+Quote Post
valdis73
сообщение 30.3.2009, 13:42
Сообщение #17


Активный участник
***

Группа: Пользователи
Сообщений: 92
Регистрация: 4.1.2009
Пользователь №: 1 670
Спасибо сказали: 4 раза




Спасибо огроменное 2 месяца не мог добиться ответа на этот вопрос на куче сайтов

Но все равно не помогло....

Тупо так же выдаёт в чат !addrequest hgjkg

может и в базе нужно чего то менять?
Go to the top of the page
+Quote Post
Setuper
сообщение 26.5.2009, 18:39
Сообщение #18


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Свистопляска с кроссплатформенностью мультистрок.

Переводы строк для различных платформ:
\r\n для DOS формата,
\n - для UNIX формата,
\r - для Mac формата.

Для совместимости скриптов в UNIX и WINDOWS системах предлагается использовать перенос \n.

Кроссплатформенной альтернативой является lua мультистрока:
Код
str = [[line 1
line 2]]


Тёмной лошадкой является следующий метод перевода строки:
Код
str = "line1\
line2"
Go to the top of the page
+Quote Post
Setuper
сообщение 3.6.2009, 13:43
Сообщение #19


Lua-master
**************

Группа: Модераторы
Сообщений: 4 065
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1390 раз




Универсальный путь к запущеному скрипту:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"


Переменная sMainPath содержит этот самый путь, переменная sMainSlash содержит слеш, который используется системой для разделения директорий в путях.

Данный lua код будет работать везде где есть lua язык, вне зависимости от типа ОС и типа хаба!

Протестировано на следующих платформах:

  • PtokaX
  • PtokaX (Linux)
  • HexHub
  • VerliHub
  • чистый язык LUA


Пример (подключение файлов):
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"

dofile(sMainPath..("myfolder1/myfolder2/myfile.lua"):gsub('/', sMainSlash))

Замена слеша сделана и расчёта приведения пути к виду с одинаковыми слешами - слешами, которые использует ОС.
Go to the top of the page
+Quote Post
alex82
сообщение 3.6.2009, 15:37
Сообщение #20


Scripter
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 26.12.2008
Из: Одесса
Пользователь №: 1 574
Спасибо сказали: 1029 раз




Цитата(Setuper @ 3.6.2009, 12:43) *
Универсальный путь к запущеному скрипту:
Код
sMainPath, sMainSlash = debug.getinfo(1).source:match"^@?(.+([/\\])).-$"
Думаю, будет не лишним добавить, что если данный способ используется не в "корневом" скрипте, а в скрипте, подгруженном при помощи dofile(), то необходимо увеличить значение аргумента функции debug.getinfo().


Спасибо сказали:
Go to the top of the page
+Quote Post

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No new Topic has attachmentsКак включать скрипты в PtokaX 0.4.1.1
21 pleomax 6 028 13.5.2012, 23:44 Посл. сообщение: Slavich
No new ВАЖНО: Topic has attachmentsЗапросы на скрипты
33 Дениска 9 367 12.5.2012, 11:45 Посл. сообщение: AKR
No New Posts СКРИПТЫ
3 alex2014 374 26.1.2012, 18:23 Посл. сообщение: Ameet
No New Posts Нужны скрипты
Искал искал но не нашол
1 Ferb 757 28.5.2011, 9:38 Посл. сообщение: Артём
No New Posts Незапускаются скрипты в Ptokax
7 Br@yZeR 2 140 3.5.2011, 10:25 Посл. сообщение: Strannik
No New Posts Сколько места нужно на диске чтобы запустить скрипты ?
1 Br@yZeR 618 2.5.2011, 19:59 Посл. сообщение: Ksan
No New Posts От: командные скрипты для установки сервиса RusHub
От темы с ID: 4075
0 Midgard 669 3.3.2011, 3:00 Посл. сообщение: Midgard
No New Posts От: Запросы на скрипты
От темы с ID: 1843
2 Alexey 718 13.2.2011, 22:13 Посл. сообщение: Alexey
No New Posts Как установить скрипты?=)
Script
9 Lamo 2 912 25.1.2011, 14:52 Посл. сообщение: deposit
No New Posts От: Запросы на скрипты
От темы с ID: 1843
1 Error404 684 3.12.2010, 1:55 Посл. сообщение: Saymon21
No New Posts От: командные скрипты для установки сервиса RusHub
От темы с ID: 4075
0 Saymon21 93 29.11.2010, 0:13 Посл. сообщение: Saymon21
No New Posts Topic has attachmentsСкрипты для установки сервиса RusHub
для Windows
0 Saymon21 2 150 23.11.2010, 17:14 Посл. сообщение: Saymon21
No New Posts Topic has attachmentsСкрипты
свалка
3 intlive 1 413 4.11.2010, 13:21 Посл. сообщение: KT315
No New Posts От: Lua Скрипты Для Hexhub
От темы с ID: 529
1 Полуношник 1 021 30.5.2010, 10:20 Посл. сообщение: Артём
No New Posts Lua скрипты
подскажите
2 mosk 2 039 12.4.2010, 8:18 Посл. сообщение: wolf night

 



RSS Сейчас: 24.5.2012, 13:09