Что нового

Загрузчик для скрипта изменяющий функции в скрипте.

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Существует скрипт который выполняет ряд действий, иногда бывают разного рода сбои не по вине скрипта или AutoIT. Соответственно скрипт после ошибки не выполняет действий для которых он был предназначен. Все ошибки пишутся в лог файл, после анализа ошибок можно ли сделать запуск этого скрипта при помощи вспомогательного скрипта который меняет ряд функций в этом скрипте , физически не изменяя строк в этом скрипте.
На примере самой простой функции это должно выглядеть так:
функция выхода из скрипта в сокращенном варианте выглядит так
Код:
Func _Quit()
...
	FileWriteLine(StringRegExpReplace(@ScriptName, '(.*)\..*', '\1') & '.log', StringFormat('[%.2d.%.2d.%.2d %.2d:%.2d:%.2d] ', @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC) &$ErrorScript &@CRLF &$ProExit &@CRLF)
   _FFQuit()
   ShellExecuteWait(@SystemDir&"\RASPHONE.EXE"," -H "&$CONNECTNAME)
   Sleep(25)
IniWrite($pathDATAini, $DATAiniSec0, $DATAiniKey0, $DATAiniVal0)
   Sleep(50)
   _ScriptRestart() ; изменяемая строка
EndFunc


возможно ли как то сделать чтоб второй скрипт следил за исполнением первого скрипта и при вызове функции _Quit() менял ее на лету скажем на..
Код:
Func _Quit()
...
	FileWriteLine(StringRegExpReplace(@ScriptName, '(.*)\..*', '\1') & '.log', StringFormat('[%.2d.%.2d.%.2d %.2d:%.2d:%.2d] ', @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC) &$ErrorScript &@CRLF &$ProExit &@CRLF)
   _FFQuit()
   ShellExecuteWait(@SystemDir&"\RASPHONE.EXE"," -H "&$CONNECTNAME)
   Sleep(25)
IniWrite($pathDATAini, $DATAiniSec0, $DATAiniKey0, $DATAiniVal0)
   Sleep(50)
   Exit ; измененная строка
EndFunc


Возможно ли такое, и возможно ли это если скрипт уже скомпилирован, если конечно то, что я написал не из ряда фантастики :smile: , и если это все таки возможно подскажите при помощи чего это можно реализовать.
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Re: Лоадер для скрипта изменяющий функции в скрипте.

Может так проще будет?)
Код:
#include <File.au3>

$CheckFile = @ScriptDir & "/CheckFunc" ; встомогательный файл
Func _Quit()
...
	FileWriteLine(StringRegExpReplace(@ScriptName, '(.*)\..*', '\1') & '.log', StringFormat('[%.2d.%.2d.%.2d %.2d:%.2d:%.2d] ', @MDAY, @MON, @YEAR, @HOUR, @MIN, @SEC) &$ErrorScript &@CRLF &$ProExit &@CRLF)
   _FFQuit()
   ShellExecuteWait(@SystemDir&"\RASPHONE.EXE"," -H "&$CONNECTNAME)
   Sleep(25)
IniWrite($pathDATAini, $DATAiniSec0, $DATAiniKey0, $DATAiniVal0)
   Sleep(50)
If Not FileExists($CheckFile) Then ; Проверяем есть ли наш контрольный файл, если нет значит эта функция ещё не запускалась
   _ScriptRestart() ; изменяемая строка
_FileCreate($CheckFile); раз функция запускалась, то создаем проверочный файл 
Else
 Exit; если функция до этого запускалась и проверочный файл был найден, то выполняем это
; если надо удалить после этого контрольный файл, то раскоментируй нижнюю строку
;FileDelete ( $CheckFile ) 
EndFunc
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
general66
Не уж то нельзя обойтись без стороннего файла?
Т.е. в скрипите проверять результат выполнения и в зависимости от результат выполнят нужную изменяемую строку. Если уж скрипт работает, т.е. не «падает», то зачем все усложнять дополнительными файлами?
 

beliy

Продвинутый
Сообщения
372
Репутация
72
`p r o x y сказал(а):
general66
Не уж то нельзя обойтись без стороннего файла?
Т.е. в скрипите проверять результат выполнения и в зависимости от результат выполнят нужную изменяемую строку. Если уж скрипт работает, т.е. не «падает», то зачем все усложнять дополнительными файлами?

В том то и дело что если я правильно понял это:

иногда бывают разного рода сбои не по вине скрипта или AutoIT

то допускается что скрипт может падать, а файл создается пустой - ни места ни ресурсов не отнимает и сработает если запустить после сбоя, да и в реализации такой способ проще...
вместо файла также можно использовать реестр. но файл практичнее...
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
beliy
Может так проще будет?)

Дело в том что сам по себе скрипт не вылетает, или скажем ситуации когда скрипт надо завершать ручками крайне редкие пока за все время было 2 раза, а вот когда в ходе работы какаето запущенная софтина сбойнула или не законектилась бывает часто . в день скрипт циклом отрабатывает 106 раз и из них от 3х до 10 сбоев по вине внешнего софта, мб из за того что тачка слабая (нет бук) поэтому необходимо, чтоб для следующего старта все запустилось корректно выходить из скрипта по функции Func _Quit() она вносит некоторые изменения для следующего старта. Во время циклической работы скрипта решил на эти ошибки не отвлекаться , а исправлять их после проделанной основной работы(может это не правильно) вот и хочется чтоб не городить еще один скрипт как то на лету модифицировать этот. вероятно не судьба (
`p r o x y
Не уж то нельзя обойтись без стороннего файла?
Т.е. в скрипите проверять результат выполнения и в
отловить на каком конкретном этапе работы скрипта проходит сбой чтоб вносить поправки сразу не получается за 4 дня работы скрипта это 424 цикла 18 не плановых выходов и все почти на разных этапах выполнения скрипта. Подскажите хотяб в какую сторону подумать над решением :smile: а то вариантов собственных эффективных нет, за реализацией думаю дело не станет :smile:)
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Исходя из этого
`p r o x y
Т.е. в скрипите проверять результат выполнения и в зависимости от результат выполнят нужную изменяемую строку
Решил что моя ошибка была в том что я все недоразумения откладывал на завершение работы скрипта вобщем , а их нужно решать сразу после возникновения . Создал функцию выхода по ошибке которая откатывает все изменения в файлах на момент старта скрипта повесил ее на хотКей , теперь имею повторный запуск с нужными настройками.

beliy
Я в скрипте уже использую один маркер просто создавал его в силу своей не опытности немножко не так, ваше решение оказалось интересней облегчил свой скрипт на n-ое количество строк спасибо за подсказку .
 

beliy

Продвинутый
Сообщения
372
Репутация
72
А вобще, если скрипт постоянно работает в цикле и есть вероятность сбоя , то я на каждом этапе надо внести проверку выполнился ли предыдущий этап... Для этого в конце каждого этапа создаем какой-нить маркер, и в начале каждого проверку маркера предыдущего. Как по мне для этого удобнее было бы заносить в ini - каждому этапу своя секция, выполнился этап записалась 1, и каждый этап начинает свою работу с проверки есть ли единица в секции предыдущего этапа, а последний этап перезаписывает все секции на 0 (можно вместо 1-0 использовать true-false не важно). Преимуществом такого подхода будет то что в любом случае скрипт продолжит с нужного момента. В добавок такой ini файл можно использовать в качестве лога - открыв его можно определить на каком этапе был сбой... Но это в общих, чертах, но у каждого скрипта может быть своя специфика...
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Нет проблем, тогда можно, как уже было сказано, запускать другой скрипт, который будет мониторить наличие запущенного процесса основного скрипта, и если такового нет – запускать его.
 
Верх