Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Пример сценария
- from mymodule import *
- from subprocess import Popen, PIPE
- # Вспомогательная функция. Запускает комманду в ОС.
- def pExec(cmd):
- try:
- p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False)
- return p
- except:
- print "Execute error"
- return NULL
- # Глобальная переменная. На самом деле нужна static переменная в функии pyEventOne().
- # Она будет использоваться для хранения предидущего значения между вызовами pyEventOne()
- pVal = getChannelValue("ChName")
- # Наше событие.
- # Возвращяет true, если оно произошло.
- # И если true, то при вызове eventBase->update() будет запущен handler - функция python
- # Для простоты описано событие аналогичное eventChanged
- def pyEventOne():
- newVal = getChannelValue("ChName")
- if (newVal == pVal):
- return False
- else:
- pVal = newVal
- return True
- # Обработчик события.
- # Вызывает экспотрированные из C++ методы, и может делать что-то еще.
- def handlerOne():
- ev1.LockHanler()
- cppSendCmd("cmd...")
- ev2.UnlockHandler()
- # еще один обработчик
- def handlerTwo():
- cppSendCmd("cmd...")
- pExec("some system command")
- # Функуия, вызываемая при инициализации сценария.
- # Создает события, биндует обработчики.
- def pyInit():
- # Создает событие (конструирует объект eventChanged)
- # и привязывает его к каналу данных с именем "SomeChannelName".
- # Возвращает объект ev1
- ev1 = CreateChEvent("SomeChannelName")
- # Конструирует объект eventPython
- ev2 = CreatePyEvent(pyEventOne)
- # Передаем в наши объекты указатели на функции обработчики
- ev1.SetHandler(handlerOne)
- ev2.SetHandler(handlerTwo)
- # Пока отключаем обработку события ev2,
- # что бы на него не реагировать раньше времени
- ev2.LockHandler()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement