LeonidPodosinnikov

scen.py

Mar 4th, 2017
222
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Пример сценария
  2.  
  3. from mymodule import *
  4. from subprocess import Popen, PIPE
  5.  
  6. # Вспомогательная функция. Запускает комманду в ОС.
  7. def pExec(cmd):
  8.     try:
  9.         p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False)
  10.         return p
  11.     except:
  12.         print "Execute error"
  13.         return NULL
  14.  
  15. # Глобальная переменная. На самом деле нужна static переменная в функии pyEventOne().
  16. # Она будет использоваться для хранения предидущего значения между вызовами pyEventOne()
  17. pVal = getChannelValue("ChName")
  18.  
  19. # Наше событие.
  20. # Возвращяет true, если оно произошло.
  21. # И если true, то при вызове eventBase->update() будет запущен handler - функция python
  22. # Для простоты описано событие аналогичное eventChanged
  23. def pyEventOne():
  24.     newVal = getChannelValue("ChName")
  25.     if (newVal == pVal):
  26.         return False
  27.     else:
  28.         pVal = newVal
  29.         return True
  30.  
  31. # Обработчик события.
  32. # Вызывает экспотрированные из C++ методы, и может делать что-то еще.
  33. def handlerOne():
  34.     ev1.LockHanler()
  35.     cppSendCmd("cmd...")
  36.     ev2.UnlockHandler()
  37.  
  38. # еще один обработчик
  39. def handlerTwo():
  40.     cppSendCmd("cmd...")
  41.     pExec("some system command")
  42.  
  43. # Функуия, вызываемая при инициализации сценария.
  44. # Создает события, биндует обработчики.
  45. def pyInit():
  46.     # Создает событие (конструирует объект eventChanged)
  47.     # и привязывает его к каналу данных с именем "SomeChannelName".
  48.     # Возвращает объект ev1
  49.     ev1 = CreateChEvent("SomeChannelName")
  50.  
  51.     # Конструирует объект eventPython
  52.     ev2 = CreatePyEvent(pyEventOne)
  53.  
  54.     # Передаем в наши объекты указатели на функции обработчики
  55.     ev1.SetHandler(handlerOne)
  56.     ev2.SetHandler(handlerTwo)
  57.  
  58.     # Пока отключаем обработку события ev2,
  59.     # что бы на него не реагировать раньше времени
  60.     ev2.LockHandler()
RAW Paste Data