//test_main.js
// test main-script
var nCode =0;
var i = 0;
main();
function main()
{
for (i=0;i<5;++i)
{
WScript.Echo("call #" + i );
nCode=AkelPad.Call("Scripts::Main", 1 , "test_sub1.js", " -Code=" + i);
}
}
Внимание, вопрос:
Хочу вызвать скрипт, дождаться его окончания, получить из него код возврата (если я правильно понимаю смысл метода AkelPad.ScriptExitCode(nCode) ) и продолжить в зависимости от результата.
Пока что не получается дождаться отработки суб-скрипта.
Если в основном скрипте применить
AkelPad.Call("Scripts::Main", 2, "test_sub1.js", " -Code=" + i);
то суб-скрипт своеобразно "виснет": в Акеле можно работать, но если нажать Esc, происходит дальнейшее исполнение скрипта.
call #0 --> будто все закончилось, но после нажатия Esc
call #1 --> будто все закончилось, но после нажатия Esc
и тд.
call #2
call #3
call #4 --> будто все закончилось, но после нажатия Esc выход из Акеля
И собственно почему и что я делаю не так?
Posted: Fri Dec 16, 2016 10:10 pm
by VladSh
В скрипт-2 оборачиваете в функцию.
В скрипте-1 подключаем 2-й скрипт с помощью Include и вызываем функцию.
Есть вроде и js-функция, которая вызывает на выполнение скрипт, Exec вроде, но это изврат.
Posted: Fri Dec 16, 2016 10:28 pm
by FeyFre
Ну можно ещё (eval, eval)(AkelPad.ReadFile(.....))
Posted: Tue Feb 07, 2017 7:41 pm
by ilia
FeyFre wrote:Ну можно ещё (eval, eval)(AkelPad.ReadFile(.....))
К сожалению не получается передать агрументы командной строки и получить обратно результат..
Posted: Wed Feb 08, 2017 2:39 am
by Skif_off
ilia
Вы попробовали запуск скрипта с параметром 1 и 2, почему не попробовали 4?
Не проще объединить всё в один, к чему такие сложности?
Posted: Wed Feb 08, 2017 3:58 pm
by ilia
VladSh wrote:В скрипт-2 оборачиваете в функцию.
В скрипте-1 подключаем 2-й скрипт с помощью Include и вызываем функцию.
В конечном итоге так и сделал.
К сожалению вызываемые скрипты очень похожи друг на друга и содержат много почти одинаковых функций, да наборы данных для обработки разные.. пришлось все функции замкнутыми сделать..
Есть вроде и js-функция, которая вызывает на выполнение скрипт, Exec вроде, но это изврат.
Да, только вот нельзя использовать AkelPad.методы() так что польза стремится к нулю..
Posted: Wed Feb 08, 2017 4:03 pm
by ilia
Skif_off wrote:ilia
Вы попробовали запуск скрипта с параметром 1 и 2, почему не попробовали 4?
Не проще объединить всё в один, к чему такие сложности?
Ну как же не попробовал.. попробовал.. Вообще Акел зависает.
Честно говоря, и не подумал бы что это "сложности".
Моя задача следующая: создать набор (или один) скриптов для обработки текстовых файлов (ЧПУ программы). Обработка каждого конкретного файла не такая уж и сложная.. Перестановки и замены. Но существует много "типов" файлов. Так, я задумал, что на каждый необходимый тип файла будет сделан свой скрипт.
Почему? Во-первых, модульность. Можно запустить данных конкретный скрипт для данного конкректного файла. Во-вторых, внутри каждого скрипта есть определенные "проверки целостности", т.е. скрипт не должен работать на "чужом" файле. В-третьих, знаю что рано или поздно из почти одинаковых поначалу скриптов получатся совсем непохожие друг на друга.. тут добавить, там изменить... )))
Вот причины почему я хочу сделать вызов одного скрипта из другого. Дочерний скрипт сам все проверит и вернет результат: "все ок" или "не мой файл" -переходим к следующему...
Posted: Thu Feb 09, 2017 12:20 am
by Skif_off
ilia
Возможно, просто баг какой-то вылез в последней версии(ях)? Предыдущие версии не пробовали?
var WshShell = CreateObject("WScript.Shell")
var WshEnvUser = WshShell.Environment("User");
var ExitCode;
ExitCode = ...;
WshEnvUser("Exit") = ExitCode;
//Первый скрипт:
...
ExitCode = WshShell.ExpandEnvironmentStrings("%Exit%")
WshEnvUser.Remove("Exit");
If ExitCode <> 0 ...
, но наверняка можно обойтись и без этого.
Posted: Thu Feb 09, 2017 9:51 am
by VladSh
ilia
Функции можно унифицировать, параметризовав и поместив в общий скрипт, который будет использоваться всеми остальными.
Можно сделать всё на классах - базовый класс с общей функциональностью и классы-наследники в разных файлах со спецификой.
Не знаю, насколько сложно определение типа файла... но можно было бы сделать вообще наоборот: в первом запускаемом файле вся логика определения типа файла, а затем от типа вызываем определённый скрипт для обработки.
Posted: Thu Feb 09, 2017 6:31 pm
by ilia
Skif_off wrote:ilia
Возможно, просто баг какой-то вылез в последней версии(ях)? Предыдущие версии не пробовали?
Или что-то упускаем.
Да, что-то упускаем. Спасибо большое.
Не хватало строки
Как и где этот код возврата потом можно использовать???
Я предполагал, что вызывающий скрипт получит этот код как результат метода Call(). но на деле получал всегда 1 независимо от значения nCode.
Posted: Fri Feb 10, 2017 7:58 pm
by VladSh
ilia
Что-то Вы куда-то не в ту степь...
Вот гляньте пример: OpenEx.js. Здесь и подключение скрипта и вызов функций из него, которые возвращают результат.
Здесь то же самое, но с использование классов: LineNumbersInsert.js.