Что нового

Как осуществить выход из скрипта?

vitaliy4us

Новичок
Сообщения
158
Репутация
4
1. Имеется файл с набором последовательно выполняемых скриптов.
2. Необходимо, чтобы при возникновении определенной ситуации в текущем выполняемом скрипте заканчивалась только его работа, но не родительского скрипта. Т.е. чтобы программа переходила к следующему скрипту в файле.
3. Таким образом, exit не подходит, goto нет. Что же остается, каждый из скриптов оборачивать в цикл, в конце которого делать ExitLoop и в случае необходимости использовать его же?
4. Как то нехорошо...
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
Если "Exit" будет вызван из дочернего (отдельного) скрипта , то завершит работу только он сам, родительский продолжит свою работу. Если же необходимо закрыть дочерний скрипт из родительского, то можно воспользоваться функцией
Код:
ProcessClose ( "process" )
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
ra4o сказал(а):
Если "Exit" будет вызван из дочернего (отдельного) скрипта , то завершит работу только он сам, родительский продолжит свою работу.
Я тоже так думал, но к сожалению, это не так...
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
vitaliy4us сказал(а):
ra4o сказал(а):
Если "Exit" будет вызван из дочернего (отдельного) скрипта , то завершит работу только он сам, родительский продолжит свою работу.
Я тоже так думал, но к сожалению, это не так...
Вопрос в том, что подразумевается под "Имеется файл с набором последовательно выполняемых скриптов."
Грубо говоря, что именно запускается, отдельно скомпилированные скрипты или же иначе.
Пример кода в студию.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
mef-t сказал(а):
vitaliy4us сказал(а):
ra4o сказал(а):
Если "Exit" будет вызван из дочернего (отдельного) скрипта , то завершит работу только он сам, родительский продолжит свою работу.
Я тоже так думал, но к сожалению, это не так...
Вопрос в том, что подразумевается под "Имеется файл с набором последовательно выполняемых скриптов."
Грубо говоря, что именно запускается, отдельно скомпилированные скрипты или же иначе.
Пример кода в студию.
Код:
;Test suit #1

#include "commonConstantsAndFunctions.au3"

Local $log = "testsuit1.log"

FileWrite($log, "Test suit number 1. Sending faxes" & @CRLF & @CRLF)

#include "test1_1.au3"
MsgBox(0, "Test suit 1", "Test 1_1 finished", 2)

#include "test1_2.au3"
MsgBox(0, "Test suit 1", "Test 1_2 finished", 2)

#include "test1_3.au3"
MsgBox(0, "Test suit 1", "Test 1_3 finished", 2)

#include "test1_4.au3
MsgBox(0, "Test suit 1", "Test 1_4 finished", 2)

MsgBox(0, "Test results", "Test suit 1 is finished", 10)
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Собственно это я и подозревал: когда пишут одно, а по факту - другое.
Это не запуск скрипта из скрипта - это один скрипт с ... не знаю как по русски, инклудами/отдельными файлами скрипта/библиотеками.
Опишите подробнее, что Вы подразумеваете под пунктом 2. Грубо говоря, что именно должно остановиться в данном скрипте.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
mef-t сказал(а):
Собственно это я и подозревал: когда пишут одно, а по факту - другое.
Это не запуск скрипта из скрипта - это один скрипт с ... не знаю как по русски, инклудами/отдельными файлами скрипта/библиотеками.
Опишите подробнее, что Вы подразумеваете под пунктом 2. Грубо говоря, что именно должно остановиться в данном скрипте.
Я наивно полагал, что если один скрипт запускается из другого (а именно это и происходит после инструкции #include), то это и называется запуском скрипта из скрипта. Впрочем, как Вам будет угодно. В принципе, можно было бы обойтись и без #include, но использование этого варианта, - это как говорится уже другая история, продиктованная другими соображениями. Вопрос остается тем же - один из скриптов прервать, выполнение других продолжить. Использование же exit прерывает работу всех скриптов.
 

Prog

Продвинутый
Сообщения
589
Репутация
72
vitaliy4us [?]
Вопрос остается тем же - один из скриптов прервать, выполнение других продолжить. Использование же exit прерывает работу всех скриптов.
У вас один скрипт. То что он поделен на несколько файлов не означает что это несколько скриптов.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
По сути, весь код в инклудах (подскажите, как по русски назвать, а то ругаться будут) это как отдельная функция, точнее форма, которая может включать как отдельный код, так и функции.
Потому, для работы с инклудами лучше всего код включать в функции. Если есть необходимость их прерывать, то в этих функциях реализовывать возможность прерывания. Например по глобальному или локальному параметру.

Если Бы все было включено в один файл, как бы Вы выполнили прерывание отдельных частей? Ровно так же выполняется прерывание с инклудами.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Prog сказал(а):
vitaliy4us [?]
Вопрос остается тем же - один из скриптов прервать, выполнение других продолжить. Использование же exit прерывает работу всех скриптов.
У вас один скрипт. То что он поделен на несколько файлов не означает что это несколько скриптов.
Я на этом не настаиваю, я хочу просто найти выход из ситуации. В принципе, он есть, но меня не очень устраивает.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
в инклуде добавить переменную. Присвоить значение False
В коде инклуда указать, что если переменная равна true, то завершаем операцию (цикл, функцию, вычисления). Не exit, а именно операции.
В основном коде при необходимости завершить этот код присваиваем переменной значение true.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
mef-t сказал(а):
По сути, весь код в инклудах (подскажите, как по русски назвать, а то ругаться будут) это как отдельная функция, точнее форма, которая может включать как отдельный код, так и функции.
Потому, для работы с инклудами лучше всего код включать в функции. Если есть необходимость их прерывать, то в этих функциях реализовывать возможность прерывания. Например по глобальному или локальному параметру.

Если Бы все было включено в один файл, как бы Вы выполнили прерывание отдельных частей? Ровно так же выполняется прерывание с инклудами.
Вот и я говорю, рано списали goto в архив.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
глупости.
пользуйтесь условными операторами и будет тоже самое (if/while/until).
Пока Вы думаете шаблонно, привыкнув к одному пути решения задач и одному пути построения кода, Вы много не добьетесь.
Любую задачу можно решить множеством решений.
 

Prog

Продвинутый
Сообщения
589
Репутация
72
Видимо код неправильно построен.
Оформите подключаемые файлы как функции и при необходимости выходите из функции.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
mef-t сказал(а):
глупости.
пользуйтесь условными операторами и будет тоже самое (if/while/until).
Пока Вы думаете шаблонно, привыкнув к одному пути решения задач и одному пути построения кода, Вы много не добьетесь.
Любую задачу можно решить множеством решений.
Ну уж нет. В данном случае, он просто незаменим. Можно, конечно обернуть весь подлежащий прерыванию скрипт в цикл, а выходить из него ExitLoop, о чем я собственно и писал в самом начале. Но в данном случае, это будет выглядеть куда как корявее, чем goto. Кстати, чем он хуже того же Return при переделке скрипта в функцию? Не бывает неправильных инструментов, все зависит от того как они используются.


Добавлено:
Сообщение автоматически объединено:

Prog сказал(а):
Видимо код неправильно построен.
Оформите подключаемые файлы как функции и при необходимости выходите из функции.
Так то оно так. И об этом думал, все бы хорошо если бы все эти функции работали только в составе одного скрипта. Но задача состоит в том, чтобы можно было бы запускать каждый скрипт сам по себе, а можно собирать пачками. Можно, конечно, все переделать, просто так как есть удобнее и хлопот меньше, поскольку скриптов под 2 сотни.
 
A

Alofa

Гость
А можно посмотреть на примерный шаблон "test1_1.au3", "test1_2.au3" и т.д?


Добавлено:
Сообщение автоматически объединено:

vitaliy4us сказал(а):
... все бы хорошо если бы все эти функции работали только в составе одного скрипта...
Так все и хорошо - вам об этом уже несколько человек сказали :wall_brake:
Может Справку почитать?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Alofa сказал(а):
Так все и хорошо - вам об этом уже несколько человек сказали :wall_brake:
Может Справку почитать?
Ну это кому-как. По моему, было бы хорошо, если бы был найден выход из ситуации. Но его, как оказалось, в приемлемом для меня виде не существует, поскольку, следуя сложившимся догмам, разработчики сочли необходимым избавиться от оператора goto. А прочитав справку, можно только лишний раз убедиться в этом. Что же касается :wall_brake: то эти тривиальные вещи были понятны изначально. Не стоит лишний раз пытаться доказывать очевидное.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
247
было бы хорошо, если бы был найден выход из ситуации.
Для каждой, конкретной ситуации есть выход в приемлемом виде и совсем без "goto".
И об этом думал, все бы хорошо если бы все эти функции работали только в составе одного скрипта. Но задача состоит в том, чтобы можно было бы запускать каждый скрипт сам по себе
что мешает в Ваши "include" включить функции, выход из которых в любой момент возможен по "return"и вызов в любой момент по её имени. Приведите, хотя-бы пример, чего Вы хотите добиться, где без "goto" Вам ну никак....
один скрипт запускается из другого (а именно это и происходит после инструкции #include)
вовсе нет , те функции, которые вы включаете в скрипт из библиотек (#include) просто добавляются в Ваш скрипт так, как если-бы Вы просто эти функции скопировали и вставили в сам текст скрипта (конечно со всеми связанными #include , константами и пр.)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
ra4o
Функции для некоторых просто открытие века.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
OffTopic:
Как понимаю, ответ был дан. Это конечно не исправленный код, но само решение было указано. А вот жалобы о том, что язык не удовлетворяет потребности автора, полагаю, нужно озвучивать не тут.
 
Верх