Автор Тема: Загрузчик для скрипта изменяющий функции в скрипте.  (Прочитано 3479 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн general66 [?]

  • Новичок
  • *
  • Сообщений: 211
  • Репутация: 3
  • Пол: Мужской
  • Пришел увидел наследил
    • Награды
Существует скрипт который выполняет ряд действий, иногда бывают разного рода сбои не по вине скрипта или AutoIT. Соответственно скрипт после ошибки не выполняет действий для которых он был предназначен. Все ошибки пишутся в лог файл, после анализа ошибок можно ли сделать запуск этого скрипта при помощи вспомогательного скрипта который меняет ряд функций в этом скрипте , физически не изменяя строк в этом скрипте.
На примере самой простой функции это должно выглядеть так:
функция выхода из скрипта в сокращенном варианте выглядит так
Код: 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() менял ее на лету скажем на..
Код: 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)
   Exit ; измененная строка
EndFunc


Возможно ли такое, и возможно ли это если скрипт уже скомпилирован, если конечно то, что я написал не из ряда фантастики :) , и если это все таки возможно подскажите при помощи чего это можно реализовать.
« Последнее редактирование: Февраль 23, 2011, 14:45:30 от `p r o x y »

Русское сообщество AutoIt


Оффлайн beliy [?]

  • Продвинутый
  • ***
  • Сообщений: 372
  • Репутация: 72
  • Пол: Мужской
    • Награды
Может так проще будет?)
Код: AutoIt [Выделить]
#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
  • Репутация: 156
  • Пол: Мужской
  • «Улыбайтесь, господа!»
    • WebInWeb
    • Награды
general66
Не уж то нельзя обойтись без стороннего файла?
Т.е. в скрипите проверять результат выполнения и в зависимости от результат выполнят нужную изменяемую строку. Если уж скрипт работает, т.е. не «падает», то зачем все усложнять дополнительными файлами?
1 тема – 1 вопрос.
Как правильно назвать свою тему – подскажут тут.
На форуме принято помечать тему «решенной» после получения ответа на свой вопрос.

Оффлайн beliy [?]

  • Продвинутый
  • ***
  • Сообщений: 372
  • Репутация: 72
  • Пол: Мужской
    • Награды
general66
Не уж то нельзя обойтись без стороннего файла?
Т.е. в скрипите проверять результат выполнения и в зависимости от результат выполнят нужную изменяемую строку. Если уж скрипт работает, т.е. не «падает», то зачем все усложнять дополнительными файлами?

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

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

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

Русское сообщество AutoIt

Re: Загрузчик для скрипта изменяющий функции в скрипте.
« Ответ #3 Отправлен: Февраль 23, 2011, 17:01:19 »

Оффлайн general66 [?]

  • Новичок
  • *
  • Сообщений: 211

  • Автор темы
  • Репутация: 3
  • Пол: Мужской
  • Пришел увидел наследил
    • Награды
beliy
Цитировать
Может так проще будет?)

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

Оффлайн general66 [?]

  • Новичок
  • *
  • Сообщений: 211

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

beliy
Я в скрипте уже использую один маркер просто создавал его в силу своей не опытности немножко не так, ваше решение оказалось интересней облегчил свой скрипт на n-ое количество строк спасибо за подсказку .
« Последнее редактирование: Февраль 24, 2011, 10:41:17 от general66 »

Оффлайн beliy [?]

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

Оффлайн `p r o x y [?]

  • Глобальный модератор
  • *
  • Сообщений: 596
  • Репутация: 156
  • Пол: Мужской
  • «Улыбайтесь, господа!»
    • WebInWeb
    • Награды
Нет проблем, тогда можно, как уже было сказано, запускать другой скрипт, который будет мониторить наличие запущенного процесса основного скрипта, и если такового нет – запускать его.

Русское сообщество AutoIt

Re: Загрузчик для скрипта изменяющий функции в скрипте.
« Ответ #7 Отправлен: Февраль 24, 2011, 22:05:08 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
5358 Просмотров
Последний ответ Февраль 25, 2011, 22:48:38
от iukash
0 Ответов
3400 Просмотров
Последний ответ Июнь 11, 2011, 18:54:16
от Sky-WaLkeR
0 Ответов
2432 Просмотров
Последний ответ Октябрь 20, 2011, 17:42:28
от general66
1 Ответов
2922 Просмотров
Последний ответ Апрель 03, 2012, 09:35:34
от Garrett
4 Ответов
1745 Просмотров
Последний ответ Апрель 12, 2012, 18:45:59
от assch
0 Ответов
948 Просмотров
Последний ответ Апрель 12, 2012, 18:35:24
от madmasles
8 Ответов
1874 Просмотров
Последний ответ Декабрь 06, 2013, 17:39:10
от SHoCK13666
4 Ответов
1365 Просмотров
Последний ответ Январь 29, 2014, 15:45:46
от Dima1337
6 Ответов
8016 Просмотров
Последний ответ Январь 07, 2015, 08:30:22
от Yashied
4 Ответов
554 Просмотров
Последний ответ Январь 11, 2017, 22:18:28
от dimcomp