42
Использование Lua в Рабочем месте
QUIK
import
sys
def
QLuaControllerStart
(Filter =
"QLua"
, TimeOut =
60
):
#Создаем объект события готовности буфера для получения отладочных сообщений
buffer_ready = win32event.CreateEvent(
None
,
0
,
0
,
"DBWIN_BUFFER_READY"
)
#Создаем объект события получения данных отладочного сообщения
data_ready = win32event.CreateEvent(
None
,
0
,
0
,
"DBWIN_DATA_READY"
)
#
Выделяем
память
под
буфер
обмена
_buffer = mmap.mmap(
0
,
4096
,
"DBWIN_BUFFER"
, mmap.ACCESS_WRITE)
timeStart = time.time()
while
time.time() < timeStart + int(TimeOut):
#Устанавливаем событие готовности буфера для получения отладочных сообщений,
#т.е. регистрируем "программу
-
ловушку"
win32event.SetEvent(buffer_ready)
#Если есть сигнал получения данных отладочного сообщения –
обрабатываем его
if
win32event.WaitForSingleObject(data_ready,
1
) == win32event.WAIT_OBJECT_0:
_buffer.seek(
0
)
#Получаем идентификатор процесса, отправившего отладочное сообщение
process_id, = struct.unpack(
"L"
, _buffer.read(
4
))
#Считываем отладочное сообщение из буфера обмена
data = _buffer.read(
4092
)
#Считываем строку до символа окончания строки, если он присутствует
if
"\0"
in
data:
str1 = data[:data.index(
"\0"
)]
#иначе вся строка в буфере является отладочным сообщением
else
:
str1 = data
#Проверяем присутствие подстроки Filter в сообщении,
#если она присутствует, считаем, что
#отладочное сообщение получено от нашего скрипта Lua
if
str1.find(Filter) >=
0
:
ticks = time.localtime()
#Выводим отладочное сообщение в консоль
print
"Pid %d [%02d:%02d:%02d]: %s"
% (process_id,
ticks.tm_hour,
ticks.tm_min,
ticks.tm_sec,
str1)
timeStart = time.time()
#Если в течение
установленного таймаута с момента
#последнего отладочного сообщения не было получено
#новых отладочных сообщений скрипа Lua
-
отравляем письмо
if
time.time() >= timeStart + int(TimeOut):