SHARE
TWEET

scen.py

LeonidPodosinnikov Mar 4th, 2017 120 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top