Содержание
- problems with python: pywintypes.com_error
- Matt Smith
- Python-сообщество
- Уведомления
- #1 Сен. 14, 2016 12:26:28
- Не удаётся подключиться к COM объекту
- #2 Сен. 23, 2016 07:47:23
- Не удаётся подключиться к COM объекту
- #3 Сен. 23, 2016 08:00:13
- Не удаётся подключиться к COM объекту
- #4 Сен. 23, 2016 08:11:39
- Не удаётся подключиться к COM объекту
- #5 Сен. 23, 2016 08:23:11
- Не удаётся подключиться к COM объекту
- #6 Сен. 23, 2016 08:46:18
- Не удаётся подключиться к COM объекту
- #7 Сен. 23, 2016 09:03:11
- Не удаётся подключиться к COM объекту
- #8 Сен. 23, 2016 09:10:20
- Не удаётся подключиться к COM объекту
- #9 Сен. 23, 2016 09:12:15
- Не удаётся подключиться к COM объекту
- #10 Сен. 23, 2016 09:18:37
- Не удаётся подключиться к COM объекту
- Python-сообщество
- Уведомления
- #1 Дек. 12, 2008 07:03:31
- С чем связана ошибка pywintypes.com_error:
- #2 Дек. 12, 2008 07:15:43
- С чем связана ошибка pywintypes.com_error:
- #3 Дек. 12, 2008 07:43:31
- С чем связана ошибка pywintypes.com_error:
- #4 Дек. 12, 2008 08:01:18
- С чем связана ошибка pywintypes.com_error:
- #5 Дек. 12, 2008 08:05:36
- С чем связана ошибка pywintypes.com_error:
- Python-сообщество
- Уведомления
- #1 Дек. 12, 2008 08:59:27
- С чем связана ошибка pywintypes.com_error:
- #2 Дек. 12, 2008 09:50:11
- С чем связана ошибка pywintypes.com_error:
- #3 Дек. 12, 2008 10:22:00
- С чем связана ошибка pywintypes.com_error:
- #4 Дек. 12, 2008 10:25:24
- С чем связана ошибка pywintypes.com_error:
- #5 Дек. 12, 2008 10:27:55
- С чем связана ошибка pywintypes.com_error:
- #6 Дек. 12, 2008 10:29:04
- С чем связана ошибка pywintypes.com_error:
- #7 Дек. 12, 2008 10:31:43
- С чем связана ошибка pywintypes.com_error:
- #8 Дек. 12, 2008 10:51:03
- С чем связана ошибка pywintypes.com_error:
- #9 Дек. 12, 2008 11:04:20
- С чем связана ошибка pywintypes.com_error:
- #10 Дек. 12, 2008 11:18:21
- С чем связана ошибка pywintypes.com_error:
- Python-сообщество
- Уведомления
- #1 Сен. 23, 2016 12:48:57
- Не удаётся подключиться к COM объекту
- #2 Сен. 23, 2016 13:23:13
- Не удаётся подключиться к COM объекту
- #3 Сен. 23, 2016 21:12:58
- Не удаётся подключиться к COM объекту
- #4 Окт. 6, 2016 10:39:19
- Не удаётся подключиться к COM объекту
- #5 Окт. 6, 2016 11:09:23
- Не удаётся подключиться к COM объекту
- #6 Окт. 6, 2016 11:16:16
- Не удаётся подключиться к COM объекту
- #7 Окт. 6, 2016 11:23:19
- Не удаётся подключиться к COM объекту
- #8 Окт. 6, 2016 11:34:15
- Не удаётся подключиться к COM объекту
- #9 Окт. 6, 2016 11:43:30
- Не удаётся подключиться к COM объекту
- #10 Окт. 6, 2016 11:52:39
- Не удаётся подключиться к COM объекту
problems with python: pywintypes.com_error
Matt Smith
I am VERY new to python , 3 days to be exact, but as I have been
programming competently in Perl and C/C++ for a while now, I thought
it would be a simple case of relearning the syntax, and in many ways
it has been just that.
However last night as I was just about to leave work, when I came
across an error message I had never seen before. Not only that but it
appears that there is very little in the way of help in all the usual
sources of information on the internet (i.e. newsgroups and forums
and the like) So to the problem at hand.
I am calling a program called v2wreg (its a program for interfacing
with the registers/parallel port, used, unfortunatly i think
exclusivly, by the company I work for), I can load the program fine,
but when I come to use any of its advanced featurs i.e.
SetDeviceAddress or ReadRegister I get the same type of error message.
i.e.
File » «, line 2, in MakeConnection
pywintypes.com_error: (-2147352571, ‘Type mismatch.’, None, 1)
When I commented out the first line I knew was giving an error, I got
the another pywintypes.com_error from the next line in my code to use
a feature of v2wreg?
Are these errors connected? I have looked about abit and there has
been some mention of programs not being registered properly
generating pywintypes.com_error errors is there anyway I can check
what is meant to be registered?
Any light anyone could spread on this subject would be very helpful
Thanks in advance,
Matt Smith,
2nd year Electronic & Electrical Engineer at Edinburgh University.
Источник
Python-сообщество
Уведомления
#1 Сен. 14, 2016 12:26:28
Не удаётся подключиться к COM объекту
Пишу программу на Python,
Windows 7 Профессиональная 64bit
Запускаю, после чего, он на меня так ругается:
Регистрировал компонент так:
Регистрация прошла успешно
Почему он не зарегистрирован?
VBA excel без проблем к нему коннектится
#2 Сен. 23, 2016 07:47:23
Не удаётся подключиться к COM объекту
Подскажите хотя бы, что значит для питоновской библиотеки win32com, что класс не зарегистрирован?
Где должна в реестре быть запись о классе, что бы он так сказать прошёл регистрацию?
Отредактировано andman (Сен. 23, 2016 07:48:37)
#3 Сен. 23, 2016 08:00:13
Не удаётся подключиться к COM объекту
А у меня встречный вопрос. Интересно важно какая у вас архитектура? Питон у вас x64 а batchx.dll вроде как 32. Я помнится давным давно когда через opc общался с различными штуками из питона, боролся с этим. Может в этом дело? Не спец по com так что не судите строго.
p.s.
Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты 🙂
Отредактировано doza_and (Сен. 23, 2016 08:03:20)
#4 Сен. 23, 2016 08:11:39
Не удаётся подключиться к COM объекту
doza_and
А у меня встречный вопрос. Интересно важно какая у вас архитектура? Питон у вас x64 а batchx.dll вроде как 32. Я помнится давным давно когда через opc общался с различными штуками из питона, боролся с этим. Может в этом дело? Не спец по com так что не судите строго.p.s. Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты
Не совсем понял, на счёт архитектуры, то что я указал win7 64 bit, это не то?
Кстати пробовал я и питон 32 бит — всё тоже самое.
А на счёт СОМ, у меня выбора особо то и нет. У меня есть среда разработки STEP7(на которой мне нужно создать конечный програмный продукт), которая умеет общаться только через СОМ.
Отредактировано andman (Сен. 23, 2016 08:13:15)
#5 Сен. 23, 2016 08:23:11
Не удаётся подключиться к COM объекту
p.s.
Мой опыт общения с com показал что это крайне неудобный и медленный способ организации связи с приложениями. Поэтому наверное тут никто вам и не отвечает. COM это последнее что будут использовать питон программисты
Зато до чертиков универсальный и разжеванный и довольно много девайсов работает по нему- потому я не был бы так категоричен.
Весьма не просто разобраться в вашей проблеме не имея нужных данных
Однако, сколько я уже топиков перечитал в своей жизни на разных ресурсах — везде где есть слово win32….. пожизненный рак.
И не пишите сразу весь код — для начала сделайте простой запрос ответ — убедитесь что есть связь! А вот дальше уже можно думать
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
#6 Сен. 23, 2016 08:46:18
Не удаётся подключиться к COM объекту
Вы наверное меня неправильно поняли.
COM — Component Object Model, а не последовательные порт
Опишу суть того, что я делаю, и что мне надо.
Я занимаюсь программированием промышленных контроллеров, в частности Siemens S7-300/400.
Среда разработки для этих контроллеров является STEP7 (https://ru.wikipedia.org/wiki/Simatic_Step_7)
Каждый раз писать программу для контроллера вручную — просто лень, так как структура программы практически одна и таже. На текущий момент, я делаю так: структурирую нужным мне образом данные тех-задания в excel таблицу, далее эту таблицу обрабатываю с помощью VBA, генерю тем самым исходники для step7, с помощью СОМ вставляю их прямо в среду разработки STEP7, так же с помощью СОМ компилю их и — профит!
Но сами понимаете, VBA по сравнению с python, это как сравнивать запорожец с мерседесом.
Устал я от VBA, вот и хочу переписать свой “автоген”, как я его называю, на python`e
Исходники конечно можно вставлять и вручную(копипаст), но их бывает достаточно много и делать приходится это довольно часто, получится это довольно геморно, поэтому нужно делать это автоматически.
Пока не победил я этом камень преткновения: почему VBA без проблем работает с СОМ объектом Simatic.Simatic, а python испытывает проблему незарегистрированного класса.
Отредактировано andman (Сен. 23, 2016 09:05:27)
#7 Сен. 23, 2016 09:03:11
Не удаётся подключиться к COM объекту
Да тут вы правы! Я не понял при чем тут реализация задачи общения по ком порту на питоне и автоматизация с екселем. Кроме того никто не запрещает вам использовать вин32 для других задач!
На данный момент я предложил попробовать просто связаться с вашим устройством посредством pyserial
что бы локализовать вашу проблему
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
#8 Сен. 23, 2016 09:10:20
Не удаётся подключиться к COM объекту
ZerG
Да тут вы правы! Я не понял при чем тут реализация задачи общения по ком порту на питоне и автоматизация с екселем. Кроме того никто не запрещает вам использовать вин32 для других задач! На данный момент я предложил попробовать просто связаться с вашим устройством посредством pyserial что бы локализовать вашу проблему
Дак у меня нет никакого устройства, есть СОМ-объект, до которого я не могу достучаться на python.
Pyserial работает с последовательным портом и выполняет совсем другие задачи, или я не прав?
#9 Сен. 23, 2016 09:12:15
Не удаётся подключиться к COM объекту
Вот теперь наконец-то понял.
Сдедайте скрины на ком обьект с его названиями и свойствами
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
#10 Сен. 23, 2016 09:18:37
Не удаётся подключиться к COM объекту
ZerG
Вот теперь наконец-то понял. Сдедайте скрины на ком обьект с его названиями и свойствами
В самом начале темы в первом сообщении 2 скрина моего COM-объекта Simatic, или надо какие то другие скрины?
Отредактировано andman (Сен. 23, 2016 09:19:16)
Источник
Python-сообщество
Уведомления
#1 Дек. 12, 2008 07:03:31
С чем связана ошибка pywintypes.com_error:
При чтении файла возникает ошибка
pywintypes.com_error: (-2147024882, ‘315345344356361362340362356367355356357340354377362350344353377347340345360370345355350377356357345360340366350350.’, None, None)
#2 Дек. 12, 2008 07:15:43
С чем связана ошибка pywintypes.com_error:
что читаешь, какой файл?
код и ошибку полностью давай =)
#3 Дек. 12, 2008 07:43:31
С чем связана ошибка pywintypes.com_error:
Начну с того что питон у меня используется как интерпритатор в системе транспортировки..
Структура файла — текстовый файл(строки с разделителями выгруженная таблица). Размер файла 65521 Кб
Я подозреваю что ошибка связана с тем что файл большой
Если я читаю этот кусок — то всё нормально — но вот если весь файл то ошибка..
#4 Дек. 12, 2008 08:01:18
С чем связана ошибка pywintypes.com_error:
какой код читает этот файл?
#5 Дек. 12, 2008 08:05:36
С чем связана ошибка pywintypes.com_error:
Да. кстати забыл отметить, что я XML формирую здесь…
from Colvir import *
import re
import cssutil
import string
from string import split
fld = <>
fld = ‘FRMT’ # РНН
fld = ‘FIO’ # ФИО/Тип налогоплательщика
fld = ‘REZ’ # Признак резиденства
fld = ‘UCH’ # Постоянное учреждение
fld = ‘PIP’ # Признак ИП
fld = ‘NAMEIP’ # Наименование ИП
fld = ‘DATEREG’ # Дата гос. регистрации ИП
fld = ‘DATECLOSE’ # Дата прекращения деятельности ИП
fld = ‘DATEGOSREG’ # Дата гос. регистрации налогоплательщика
fld = ‘DATELAST’ # Дата последнего снятия с рег. учёта по месту нахождения
fld = ‘PRICH’ # Причина снятия с учёта
fld = ‘TYPEISK’ # Тип исключения из гос. реестра
fld = ‘DATEISK’ # Дата исключения из гос. реестра
fld = ‘DATENPRI’ # Дата начала приостановления
fld = ‘DATEOPRI’ # Дата окончания приостановления
Источник
Python-сообщество
Уведомления
#1 Дек. 12, 2008 08:59:27
С чем связана ошибка pywintypes.com_error:
По моему я понял в чем проблема — LONG RAW не поддерживает такого размера который я пытаюсь записать…
#2 Дек. 12, 2008 09:50:11
С чем связана ошибка pywintypes.com_error:
ну написано же все =))
код ошибки 0x8007000E (E_OUTOFMEMORY) в десятичном представлении -2147024882
сообщение тоже довольно красноречиво “Недостаточно памяти для заершения операции”
shiza
надобы это дело выполнить на системе, в которой msxml — английский, чтоб ошибку прочитать.
#3 Дек. 12, 2008 10:22:00
С чем связана ошибка pywintypes.com_error:
nobodyzzz =)
а я долго гадал, что-же это за кодировка….
#4 Дек. 12, 2008 10:25:24
С чем связана ошибка pywintypes.com_error:
а как с этим бороться… то есть что нужно сделать чтобы читать например файлы с большим размером!?
#5 Дек. 12, 2008 10:27:55
С чем связана ошибка pywintypes.com_error:
Это проблема не с читать а с писать формированием XML с помощью msxml
К сожалению именно с ним я не работал.
Но к слову скажу, что другие при работе с другими модулями XML (не msxml) таких проблем не встречал.
#6 Дек. 12, 2008 10:29:04
С чем связана ошибка pywintypes.com_error:
может всё таки в таблицу не может записать значение… хотя в Oracle LONG RAW поддерживает бинарные данные переменной длины размером до 2 Гб
#7 Дек. 12, 2008 10:31:43
С чем связана ошибка pywintypes.com_error:
shiza
Это проблема не с читать а с писать формированием XML с помощью msxml
К сожалению именно с ним я не работал.
Но к слову скажу, что другие при работе с другими модулями XML (не msxml) таких проблем не встречал.
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
#8 Дек. 12, 2008 10:51:03
С чем связана ошибка pywintypes.com_error:
А как мне быть если нет других модулей для работы с XML — я могу их на текущую версию как-нибудь поставить!? Просто полностью обновить версию Питона нет возможности сейчас 1.52
#9 Дек. 12, 2008 11:04:20
С чем связана ошибка pywintypes.com_error:
Можно ли прикрутить к моей версии Питона какой-нибудь модуль для работы с XML, если да то какой лучше и как это можно сделать!?
#10 Дек. 12, 2008 11:18:21
С чем связана ошибка pywintypes.com_error:
Vjn
Можно ли прикрутить к моей версии Питона какой-нибудь модуль для работы с XML, если да то какой лучше и как это можно сделать!?
Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…
Источник
Python-сообщество
Уведомления
#1 Сен. 23, 2016 12:48:57
Не удаётся подключиться к COM объекту
Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало.
#2 Сен. 23, 2016 13:23:13
Не удаётся подключиться к COM объекту
Возможно таки помогла регистрация других ДЛЛ — тут уже точно никто не скажет!
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
#3 Сен. 23, 2016 21:12:58
Не удаётся подключиться к COM объекту
andman
Как то я видимо плохо попробовал ранее запустить сей скрипт на python 32bit, попробовал снова, всё заработало.
#4 Окт. 6, 2016 10:39:19
Не удаётся подключиться к COM объекту
Помогите со следующей проблемкой:
VBA скрипт работает так:
После чего в среду разработки вставляется исходник signal.scl
Пробую аналог на python:
Собственно у меня такие вопросы:
В строке simatic = win32com.client.Dispatch(“Simatic.Simatic”), simatic это уже объект класса Simatic или сам класс?
По ощущения вроде как объект.
Но в строке, на которую ругается нужно указать сам класс, а не объект класса S7source, как это сделать?
Отредактировано andman (Окт. 6, 2016 10:51:40)
#5 Окт. 6, 2016 11:09:23
Не удаётся подключиться к COM объекту
по логике
“ActiveWorkbook.Path + ”signal.scl“” = равно пути где лежит файл.
Другими словами на выходе что-то типа
c:programmasignal.scl
думаю у вас должно получиться что-то типа
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
#6 Окт. 6, 2016 11:16:16
Не удаётся подключиться к COM объекту
на команду print(path + “\” + bname + “.scl”)
получаю C:UsersandPycharmProjectsTuhardsignal.scl
что соответствует нужному файлу
Проблема не в пути, а в указании s7source
#7 Окт. 6, 2016 11:23:19
Не удаётся подключиться к COM объекту
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Отредактировано ZerG (Окт. 6, 2016 11:26:03)
#8 Окт. 6, 2016 11:34:15
Не удаётся подключиться к COM объекту
Отредактировано andman (Окт. 6, 2016 11:40:40)
#9 Окт. 6, 2016 11:43:30
Не удаётся подключиться к COM объекту
Что значит строка интерпритатора File “ >”, line 3, in Add ?
Line 3 что означает? Ошибка третьего аргумента?
#10 Окт. 6, 2016 11:52:39
Не удаётся подключиться к COM объекту
Учитывая сложность и запустанность вашего случая я бы попробовал сначала написать код банально и пошагово в максимальной похожести на оригинал
После каждой строки вывести print(‘…’) что бы лутче понимать все ли удачно проходит
И смотреть все ли методы отработали — так будет проще выявить “узкое место”
Попробуйте что нить в стиле
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости
Источник
OS (e.g. Windows 10 a)
Versions of xlwings, Excel and Python ( Office 2010, Python 3.8)
when i read my excel data in threading i got this error
pywintypes.com_error: (-2147221008, ‘CoInitialize has not been called.’, None, None)
File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedpythonlog.py", line 103, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedpythonlog.py", line 86, in callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedpythoncontext.py", line 122, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedpythoncontext.py", line 85, in callWithContext return func(*args,**kw) --- <exception caught here> --- File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedinternetselectreactor.py", line 149, in _doReadOrWrite why = getattr(selectable, method)() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedinternettcp.py", line 243, in doRead return self._dataReceived(data) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedinternettcp.py", line 249, in _dataReceived rval = self.protocol.dataReceived(data) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedprotocolstls.py", line 330, in dataReceived self._flushReceiveBIO() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedprotocolstls.py", line 295, in _flushReceiveBIO ProtocolWrapper.dataReceived(self, bytes) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagestwistedprotocolspolicies.py", line 120, in dataReceived self.wrappedProtocol.dataReceived(data) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahntwistedwebsocket.py", line 290, in dataReceived self._dataReceived(data) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahnwebsocketprotocol.py", line 1206, in _dataReceived self.consumeData() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahnwebsocketprotocol.py", line 1218, in consumeData while self.processData() and self.state != WebSocketProtocol.STATE_CLOSED: File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahnwebsocketprotocol.py", line 1578, in processData fr = self.onFrameEnd() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahnwebsocketprotocol.py", line 1703, in onFrameEnd self._onMessageEnd() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahntwistedwebsocket.py", line 318, in _onMessageEnd self.onMessageEnd() File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahnwebsocketprotocol.py", line 627, in onMessageEnd self._onMessage(payload, self.message_is_binary) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesautobahntwistedwebsocket.py", line 321, in _onMessage self.onMessage(payload, isBinary) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packageskiteconnectticker.py", line 71, in onMessage self.factory.on_message(self, payload, is_binary) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packageskiteconnectticker.py", line 670, in _on_message self.on_ticks(self, self._parse_binary(payload)) File "C:/Users/Welcome/Desktop/Trade/Kite_Check.py", line 79, in on_ticks if tsht.range((2, 7)).value == 'Target order still Pending' : File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesxlwingsmain.py", line 861, in range return Range(impl=self.impl.range(cell1, cell2)) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesxlwings_xlwindows.py", line 613, in range xl1 = self.xl.Cells(arg1[0], arg1[1]) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packagesxlwings_xlwindows.py", line 120, in __getattr__ v = getattr(self._inner, item) File "C:UsersWelcomeAppDataLocalProgramsPythonPython38-32libsite-packageswin32comclientdynamic.py", line 516, in __getattr__ ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1) pywintypes.com_error: (-2147221008, 'CoInitialize has not been called.', None, None)
Include a minimal code sample to reproduce the issue (and attach a sample workbook if required!)
filename_read = 'My_trade.xlsx' wb = xw.Book(filename_read) dsht = wb.sheets['Data'] tesht = wb.sheets['Trading_Entry'] tsht = wb.sheets['Trading'] osht = wb.sheets['Order'] pnlsht = wb.sheets['PNL'] if tsht.range((2, 7)).value == 'Target order still Pending' : for tick in ticks:
This is the error that my Dash error console throws me. My previous iteration of code had solved this by using «pythoncom.CoInitialize()».
But I’m trying to streamline my code and make it update/work faster, and I cannot solve this error again.
My main issue is that I don’t understand the error or why I’m getting it. What is it?
Here is my MAIN code:
# import stuff for paths and serials
import win32com.client
import pythoncom
import vna_control as vna
# import stuff for treating data
import panda_express as pe
import datetime
# import stuff for plotly and dash
import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
pythoncom.CoInitialize()
serial = win32com.client.Dispatch("PicoControl2.PicoVNA_2")
obj = vna.VNA_Object("Pico VNA", "Curling Probe")
obj.open_vna(serial)
probe_file = f'Run {datetime.datetime.now().strftime("%Y-%m-%d-%I-%M-%S")}.csv'
pe.writing_Frequency(probe_file, obj.measure_vna_frequency(serial))
'''This section is Dash-app related'''
app = dash.Dash(__name__)
app.layout = html.Div(
[
dcc.Graph(id='live-graph', animate=False),
dcc.Interval(
id='graph-update',
interval=4000,
n_intervals = 0
),
]
)
@app.callback(Output('live-graph', 'figure'),
[Input('graph-update', 'n_intervals')])
def update_graph_scatter(n):
pythoncom.CoInitialize()
y_s11_1 = obj.measure_vna_ys11(serial)
x_frequency_1 = obj.measure_vna_frequency(serial)
pe.writing_Data(probe_file, y_s11_1)
data = go.Scatter(
x=x_frequency_1,
y=y_s11_1,
name='S11 Parameters of Curling Probe',
mode='lines'
)
return {'data': [data], 'layout': go.Layout(xaxis=dict(range=[min(x_frequency_1), max(x_frequency_1)]),
yaxis=dict(range=[min(y_s11_1), max(y_s11_1)]),
xaxis_title=dict(text="Frequency (MHz)"),
yaxis_title=dict(text="S11 Parameter"))}
obj.close_vna(serial)
if __name__ == '__main__':
app.run_server(debug=True)
The problem I think lies in the «def update_graph_scatter» function. Something about that block gives the multithread error but I don’t know why. Here is the module/class «vna_control» I made to control my VNA for taking data. Its an instrument connected to my laptop via USB:
# It is better to create a class of VNA object that contains a bunch of methods.
import pythoncom
from pathlib import Path
import numpy as np
calibrationpath = Path("C:/Users/ayilarana/PycharmProjects/pythonProject/ring.cal")
calibrationkitpath = Path("C:/Users/ayilarana/PycharmProjects/pythonProject/SF287.kit")
pythoncom.CoInitialize()
class VNA_Object:
def __init__(self, name, description):
self.name = name
self.type = description
def open_vna(self, serial_1):
pythoncom.CoInitialize()
findVNA = serial_1.FND()
if findVNA == 0:
print("No VNA Loaded")
exit()
else:
print('VNA ' + str(findVNA) + ' Loaded')
dll = serial_1.DLLVer()
print(dll)
cali = serial_1.SelectKit(calibrationkitpath, "1")
print("Result " + str(cali))
enhance_averages = serial_1.SetEnhance("aver", 100)
print("Averages: " + enhance_averages)
ans = serial_1.SelectCal(calibrationpath)
print("Result " + str(ans))
return print("VNA Open")
def measure_vna_frequency(self, serial_1):
pythoncom.CoInitialize()
meas = serial_1.Measure("S11")
print("Result " + str(meas))
raw = serial_1.GetData("S11", "logmag", 0)
splitdata = raw.split(',')
converteddata = np.array(splitdata)
converteddata = converteddata.astype(np.float)
x_frequency = converteddata[:: 2]
return x_frequency
def measure_vna_ys11(self, serial_1):
pythoncom.CoInitialize()
meas = serial_1.Measure("S11")
print("Result " + str(meas))
raw = serial_1.GetData("S11", "logmag", 0)
splitdata = raw.split(',')
converteddata = np.array(splitdata)
converteddata = converteddata.astype(np.float)
y_s11 = converteddata[1:: 2]
return y_s11
def close_vna(self, serial_1):
serial_1.CloseVNA()
return print("VNA Closed")
Here is the module I use to read/write data to .csv:
import pandas as pd
import datetime
def writing_Frequency(file, x_frequency):
df = pd.DataFrame()
df.insert(0, "Frequency", x_frequency, True)
df.to_csv(file, index=False)
return print(df)
def writing_Data(file, y_s11):
df = pd.read_csv(file)
df[f'{datetime.datetime.now().strftime("%I-%M-%S")}'] = y_s11
df.to_csv(file, index=False)
return print(df)
If you’re wondering about my code, naming conventions etc… I have no idea what I’m doing really. I’m trying to refactor my code so it is quicker and dash/plotly can update at at least 1s without my VNA failing to read/record data. I’ve never used classes before, so I’m not even sure I’m supposed to use it. Just thought it would be the cleanest way to make a «VNA Object» and give it commands to open, take data, close etc etc… without repeating instructions in long-winded lines of code.
Any help/tips are appreciated, I’ve been stuck on this for a couple of hours now.
Best regards,
Here are the examples of the python api pywintypes.com_error taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
3
Example 1
def __call__ (self, timeout_ms=-1):
"""When called, return the instance which caused the event. Supports
timeout in milliseconds (defaulting to infinite). If the watcher
times out, :exc:`x_wmi_timed_out` is raised. This makes it easy to support
watching for multiple objects.
"""
try:
event = self.wmi_event.NextEvent (timeout_ms)
if self.is_extrinsic:
return _wmi_event (event, None, self.fields)
else:
return _wmi_event (
event.Properties_ ("TargetInstance").Value,
_wmi_object (event, property_map=self._event_property_map),
self.fields
)
except pywintypes.com_error:
handle_com_error ()
3
Example 2
def contains(self, name_or_index):
try:
self.xl(name_or_index)
except pywintypes.com_error as e:
if e.hresult == -2147352567:
return False
else:
raise
return True
3
Example 3
@property
def name(self):
if self.xl is not None:
try:
name = Name(xl=self.xl.Name)
except pywintypes.com_error:
name = None
return name
else:
return None
3
Example 4
def testStrangeArgsTooMany(self):
try:
raise pywintypes.com_error("foo", "bar", "you", "never", "kn", 0)
self.fail("Expected exception")
except pywintypes.com_error as exc:
self.failUnlessEqual(exc.args[0], "foo")
self.failUnlessEqual(exc.args[-1], 0)
self.failUnlessEqual(exc.hresult, "foo")
self.failUnlessEqual(exc.strerror, "bar")
self.failUnlessEqual(exc.excepinfo, "you")
self.failUnlessEqual(exc.argerror, "never")
3
Example 5
def _cached_associated_classes (self):
if self._associated_classes is None:
if isinstance (self, _wmi_class):
params = {'bSchemaOnly' : True}
else:
params = {'bClassesOnly' : True}
try:
associated_classes = dict (
(assoc.Path_.Class, _wmi_class (self._namespace, assoc)) for
assoc in self.ole_object.Associators_ (**params)
)
_set (self, "_associated_classes", associated_classes)
except pywintypes.com_error:
handle_com_error ()
return self._associated_classes
3
Example 6
def __getattr__ (self, attribute):
"""Offer WMI classes as simple attributes. Pass through any untrapped
unattribute to the underlying OLE object. This means that new or
unmapped functionality is still available to the module user.
"""
#
# Don't try to match against known classes as was previously
# done since the list may not have been requested
# (find_classes=False).
#
try:
return self._cached_classes (attribute)
except pywintypes.com_error:
return getattr (self._namespace, attribute)
3
Example 7
def __setattr__(self, key, value):
n_attempt = 1
while True:
try:
return setattr(self._inner, key, value)
except pywintypes.com_error as e:
if (not N_COM_ATTEMPTS or n_attempt < N_COM_ATTEMPTS) and e.hresult == -2147418111:
n_attempt += 1
continue
else:
raise
except AttributeError as e:
if not N_COM_ATTEMPTS or n_attempt < N_COM_ATTEMPTS:
n_attempt += 1
continue
else:
raise
3
Example 8
def _raw_query (self, wql):
"""Execute a WQL query and return its raw results. Use the flags
recommended by Microsoft to achieve a read-only, semi-synchronous
query where the time is taken while looping through.
NB Backslashes need to be doubled up.
"""
flags = wbemFlagReturnImmediately | wbemFlagForwardOnly
wql = wql.replace ("\", "\\")
try:
return self._namespace.ExecQuery (strQuery=wql, iFlags=flags)
except pywintypes.com_error:
handle_com_error ()
3
Example 9
def start(self):
try:
self._object = None
self._object = win32com.client.DispatchEx(self._clsid)
except pywintypes.com_error as e:
print("Caught pywintypes.com_error creating ActiveX control [%s]" % e)
raise
except:
print("Caught unkown exception creating ActiveX control [%s]" % sys.exc_info()[0])
raise
3
Example 10
def __setattr__ (self, attribute, value):
"""If the attribute to be set is valid for the proxied
COM object, set that objects's parameter value; if not,
raise an exception.
"""
try:
if attribute in self.properties:
self._cached_properties (attribute).set (value)
if self.ole_object.Path_.Path:
self.ole_object.Put_ ()
else:
raise AttributeError (attribute)
except pywintypes.com_error:
handle_com_error ()
3
Example 11
def testStrangeArgsNone(self):
try:
raise pywintypes.com_error()
self.fail("Expected exception")
except pywintypes.com_error as exc:
self.failUnlessEqual(exc.args, ())
self.failUnlessEqual(exc.hresult, None)
self.failUnlessEqual(exc.strerror, None)
self.failUnlessEqual(exc.argerror, None)
self.failUnlessEqual(exc.excepinfo, None)
3
Example 12
def testStrangeArgsTooMany(self):
try:
raise pywintypes.com_error("foo", "bar", "you", "never", "kn", 0)
self.fail("Expected exception")
except pywintypes.com_error, exc:
self.failUnlessEqual(exc.args[0], "foo")
self.failUnlessEqual(exc.args[-1], 0)
self.failUnlessEqual(exc.hresult, "foo")
self.failUnlessEqual(exc.strerror, "bar")
self.failUnlessEqual(exc.excepinfo, "you")
self.failUnlessEqual(exc.argerror, "never")
3
Example 13
def instances (self, class_name):
"""Return a list of instances of the WMI class. This is
(probably) equivalent to querying with no qualifiers::
wmi.WMI ().instances ("Win32_LogicalDisk")
# should be the same as
wmi.WMI ().Win32_LogicalDisk ()
"""
try:
return [_wmi_object (obj) for obj in self._namespace.InstancesOf (class_name)]
except pywintypes.com_error:
handle_com_error ()
3
Example 14
def __str__ (self):
"""For a call to print [object] return the OLE description
of the properties / values of the object
"""
try:
return self.ole_object.GetObjectText_ ()
except pywintypes.com_error:
handle_com_error ()
3
Example 15
def __contains__(self, key):
try:
self.xl.Item(key)
return True
except pywintypes.com_error:
return False
3
Example 16
def testStrangeArgsNotEnough(self):
try:
raise pywintypes.com_error("foo")
self.fail("Expected exception")
except pywintypes.com_error as exc:
self.failUnlessEqual(exc.args[0], "foo")
self.failUnlessEqual(exc.hresult, "foo")
self.failUnlessEqual(exc.strerror, None)
self.failUnlessEqual(exc.excepinfo, None)
self.failUnlessEqual(exc.argerror, None)
3
Example 17
def __repr__ (self):
"""
Indicate both the fact that this is a wrapped WMI object
and the WMI object's own identifying class.
"""
try:
return "<%s: %s>" % (self.__class__.__name__, self.Path_.Path.encode ("ascii", "backslashreplace"))
except pywintypes.com_error:
handle_com_error ()
3
Example 18
@property
def hyperlink(self):
if self.xl is not None:
try:
return self.xl.Hyperlinks(1).Address
except pywintypes.com_error:
raise Exception("The cell doesn't seem to contain a hyperlink!")
else:
return ''
3
Example 19
def derivation (self):
"""Return a tuple representing the object derivation for
this object, with the most specific object first::
pp0 = wmi.WMI ().Win32_ParallelPort ()[0]
print ' <- '.join (pp0.derivation ())
"""
try:
return self.ole_object.Derivation_
except pywintypes.com_error:
handle_com_error ()
3
Example 20
def instances (self):
"""Return a list of instances of the WMI class
"""
try:
return [_wmi_object (instance, self) for instance in self.Instances_ ()]
except pywintypes.com_error:
handle_com_error ()
3
Example 21
def __getattr__ (self, attribute):
try:
if attribute in self.properties:
return _wmi_property (self.Properties_ (attribute))
else:
return _wmi_object.__getattr__ (self, attribute)
except pywintypes.com_error:
handle_com_error ()
3
Example 22
def path (self):
"""Return the WMI URI to this object. Can be used to
determine the path relative to the parent namespace::
pp0 = wmi.WMI ().Win32_ParallelPort ()[0]
print pp0.path ().RelPath
.. Do more with this
"""
try:
return self.ole_object.Path_
except pywintypes.com_error:
handle_com_error ()
3
Example 23
def is_admin(self):
import pywintypes
try:
from win32com.shell import shell
return shell.IsUserAnAdmin()
except pywintypes.com_error:
# Thrown on certain XP installs
return True
3
Example 24
def query (self, fields=[], **where_clause):
"""Make it slightly easier to query against the class,
by calling the namespace's query with the class preset.
Won't work if the class has been instantiated directly.
"""
#
# FIXME: Not clear if this can ever happen
#
if self._namespace is None:
raise x_wmi_no_namespace ("You cannot query directly from a WMI class")
try:
field_list = ", ".join (fields) or "*"
wql = "SELECT " + field_list + " FROM " + self._class_name
if where_clause:
wql += " WHERE " + " AND ". join (["%s = %r" % (k, str (v)) for k, v in where_clause.items ()])
return self._namespace.query (wql, self, fields)
except pywintypes.com_error:
handle_com_error ()
2
Example 25
def np_cb(word, word_eol, userdata):
try:
itunes = win32com.client.Dispatch('iTunes.Application')
except pywintypes.com_error:
print("itunes: Failed to communicate with itunes. Note that this requires admin access and you should have had a UAC prompt.")
return hexchat.EAT_ALL
# TODO: Settings
try:
track = itunes.CurrentTrack
hexchat.command('me is now playing {} by {} on {}'.format(track.Name, track.Artist, track.Album))
except AttributeError:
print('No song was found playing.')
return hexchat.EAT_ALL
2
Example 26
def _get_resource(self, resource_uri):
session = self._get_wsman_session()
try:
return session.Get(resource_uri)
except pywintypes.com_error as ex:
if len(ex.excepinfo) > 5 and ex.excepinfo[5] == -2144108544:
return None
else:
raise
2
Example 27
def testStrangeArgsNone(self):
try:
raise pywintypes.com_error()
self.fail("Expected exception")
except pywintypes.com_error, exc:
self.failUnlessEqual(exc.args, ())
self.failUnlessEqual(exc.hresult, None)
self.failUnlessEqual(exc.strerror, None)
self.failUnlessEqual(exc.argerror, None)
self.failUnlessEqual(exc.excepinfo, None)
2
Example 28
def run(bdbname, useDBM, ldbname, rdbname, foldname, doTrain, doClassify,
pwd, idxname, logname):
bayes = storage.open_storage(bdbname, useDBM)
try:
notesindex = pickle_read(idxname)
except IOError, e:
if e.errno != errno.ENOENT:
raise
notesindex = {}
print "%s file not found, this is a first time run" % (idxname,)
print "No classification will be performed"
need_replicate = False
sess = win32com.client.Dispatch("Lotus.NotesSession")
try:
if pwd:
sess.initialize(pwd)
else:
sess.initialize()
except pywintypes.com_error:
print "Session aborted"
sys.exit()
try:
db = sess.GetDatabase(rdbname, ldbname)
except pywintypes.com_error:
if rdbname:
print "Could not open database remotely, trying locally"
try:
db = sess.GetDatabase("", ldbname)
need_replicate = True
except pywintypes.com_error:
print "Could not open database"
sys.exit()
else:
raise
log = sess.CreateLog("SpambayesAgentLog")
try:
log.OpenNotesLog("", logname)
except pywintypes.com_error:
print "Could not open log"
log = None
if log:
log.LogAction("Running spambayes")
vinbox = db.getView('($Inbox)')
vspam = db.getView("%sSpam" % (foldname,))
vham = db.getView("%sHam" % (foldname,))
vtrainspam = db.getView("%sTrain as Spam" % (foldname,))
vtrainham = db.getView("%sTrain as Ham" % (foldname,))
if doTrain:
processAndTrain(vtrainspam, vspam, bayes, True, notesindex, log)
# for some reason, using inbox as a target here loses the mail
processAndTrain(vtrainham, vham, bayes, False, notesindex, log)
if need_replicate:
try:
print "Replicating..."
db.Replicate(rdbname)
print "Done"
except pywintypes.com_error:
print "Could not replicate"
if doClassify:
classifyInbox(vinbox, vtrainspam, bayes, ldbname, notesindex, log)
print "The Spambayes database currently has %s Spam and %s Ham"
% (bayes.nspam, bayes.nham)
bayes.store()
pickle_write(idxname, notesindex)
if log:
log.LogAction("Finished running spambayes")
2
Example 29
def testStrangeArgsNotEnough(self):
try:
raise pywintypes.com_error("foo")
self.fail("Expected exception")
except pywintypes.com_error, exc:
self.failUnlessEqual(exc.args[0], "foo")
self.failUnlessEqual(exc.hresult, "foo")
self.failUnlessEqual(exc.strerror, None)
self.failUnlessEqual(exc.excepinfo, None)
self.failUnlessEqual(exc.argerror, None)
2
Example 30
def unregister_port(self, external_port, protocol):
try:
self.port_collection.Remove(external_port, protocol)
self.logfunc(INFO, ("unregisterd: %s, %s" % (external_port, protocol)), optional=False)
except pywintypes.com_error, e:
if (e[2][5] == -2147352567):
UPNPError(self.logfunc, ("Port %d:%s not bound" % (external_port, protocol)))
elif (e[2][5] == -2147221008):
UPNPError(self.logfunc, ("Port %d:%s is bound and is not ours to remove" % (external_port, protocol)))
elif (e[2][5] == -2147024894):
UPNPError(self.logfunc, ("Port %d:%s not bound (2)" % (external_port, protocol)))
else:
raise
2
Example 31
def _list_ports(self):
mappings = []
try:
for mp in self.port_collection:
mapping = UPnPPortMapping(mp.ExternalPort, mp.InternalPort, mp.Protocol,
mp.InternalClient, mp.Description)
mappings.append(mapping)
except pywintypes.com_error, e:
# it's the "for mp in self.port_collection" iter that can throw
# an exception.
# com_error: (-2147220976, 'The owner of the PerUser subscription is
# not logged on to the system specified',
# None, None)
pass
return mappings
0
Example 32
def MakeModuleForTypelibInterface(typelib_ob, progressInstance = None, bForDemand = bForDemandDefault, bBuildHidden = 1):
"""Generate support for a type library.
Given a PyITypeLib interface generate and import the necessary support files. This is useful
for getting makepy support for a typelibrary that is not registered - the caller can locate
and load the type library itself, rather than relying on COM to find it.
Returns the Python module.
Params
typelib_ob -- The type library itself
progressInstance -- Instance to use as progress indicator, or None to
use the GUI progress bar.
"""
import makepy
try:
makepy.GenerateFromTypeLibSpec( typelib_ob, progressInstance=progressInstance, bForDemand = bForDemandDefault, bBuildHidden = bBuildHidden)
except pywintypes.com_error:
return None
tla = typelib_ob.GetLibAttr()
guid = tla[0]
lcid = tla[1]
major = tla[3]
minor = tla[4]
return GetModuleForTypelib(guid, lcid, major, minor)
0
Example 33
def new (self, **kwargs):
"""This is the equivalent to the raw-WMI SpawnInstance_
method. Note that there are relatively few uses for
this, certainly fewer than you might imagine. Most
classes which need to create a new *real* instance
of themselves, eg Win32_Process, offer a .Create
method. SpawnInstance_ is generally reserved for
instances which are passed as parameters to such
`.Create` methods, a common example being the
`Win32_SecurityDescriptor`, passed to `Win32_Share.Create`
and other instances which need security.
The example here is `Win32_ProcessStartup`, which
controls the shown/hidden state etc. of a new
`Win32_Process` instance::
import win32con
import wmi
c = wmi.WMI ()
startup = c.Win32_ProcessStartup.new (ShowWindow=win32con.SW_SHOWMINIMIZED)
pid, retval = c.Win32_Process.Create (
CommandLine="notepad.exe",
ProcessStartupInformation=startup
)
.. warning::
previous versions of this docstring illustrated using this function
to create a new process. This is *not* a good example of its use;
it is better handled with something like the example above.
"""
try:
obj = _wmi_object (self.SpawnInstance_ (), self)
obj.set (**kwargs)
return obj
except pywintypes.com_error:
handle_com_error ()
0
Example 34
def __init__ (self, ole_object, method_name):
"""
:param ole_object: The WMI class/instance whose method is to be called
:param method_name: The name of the method to be called
"""
try:
self.ole_object = Dispatch (ole_object)
self.method = ole_object.Methods_ (method_name)
self.qualifiers = {}
for q in self.method.Qualifiers_:
self.qualifiers[q.Name] = q.Value
self.provenance = "n".join (self.qualifiers.get ("MappingStrings", []))
self.in_parameters = self.method.InParameters
self.out_parameters = self.method.OutParameters
if self.in_parameters is None:
self.in_parameter_names = []
else:
self.in_parameter_names = [(i.Name, i.IsArray) for i in self.in_parameters.Properties_]
if self.out_parameters is None:
self.out_parameter_names = []
else:
self.out_parameter_names = [(i.Name, i.IsArray) for i in self.out_parameters.Properties_]
doc = "%s (%s) => (%s)" % (
method_name,
", ".join ([name + ("", "[]")[is_array] for (name, is_array) in self.in_parameter_names]),
", ".join ([name + ("", "[]")[is_array] for (name, is_array) in self.out_parameter_names])
)
privileges = self.qualifiers.get ("Privileges", [])
if privileges:
doc += " | Needs: " + ", ".join (privileges)
self.__doc__ = doc
except pywintypes.com_error:
handle_com_error ()
0
Example 35
def get (self, moniker):
try:
return _wmi_object (self.wmi.Get (moniker))
except pywintypes.com_error:
handle_com_error ()
0
Example 36
def __call__ (self, *args, **kwargs):
"""Execute the call to a WMI method, returning
a tuple (even if is of only one value) containing
the out and return parameters.
"""
try:
if self.in_parameters:
parameter_names = {}
for name, is_array in self.in_parameter_names:
parameter_names[name] = is_array
parameters = self.in_parameters
#
# Check positional parameters first
#
for n_arg in range (len (args)):
arg = args[n_arg]
parameter = parameters.Properties_[n_arg]
if parameter.IsArray:
try: list (arg)
except TypeError: raise TypeError ("parameter %d must be iterable" % n_arg)
parameter.Value = arg
#
# If any keyword param supersedes a positional one,
# it'll simply overwrite it.
#
for k, v in kwargs.items ():
is_array = parameter_names.get (k)
if is_array is None:
raise AttributeError ("%s is not a valid parameter for %s" % (k, self.__doc__))
else:
if is_array:
try: list (v)
except TypeError: raise TypeError ("%s must be iterable" % k)
parameters.Properties_ (k).Value = v
result = self.ole_object.ExecMethod_ (self.method.Name, self.in_parameters)
else:
result = self.ole_object.ExecMethod_ (self.method.Name)
results = []
for name, is_array in self.out_parameter_names:
value = result.Properties_ (name).Value
if is_array:
#
# Thanks to Jonas Bjering for bug report and patch
#
results.append (list (value or []))
else:
results.append (value)
return tuple (results)
except pywintypes.com_error:
handle_com_error ()
0
Example 37
def watch_for (
self,
raw_wql=None,
notification_type="operation",
wmi_class=None,
delay_secs=1,
fields=[],
**where_clause
):
"""Set up an event tracker on a WMI event. This function
returns an wmi_watcher which can be called to get the
next event::
c = wmi.WMI ()
raw_wql = "SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_Process'"
watcher = c.watch_for (raw_wql=raw_wql)
while 1:
process_created = watcher ()
print process_created.Name
# or
watcher = c.watch_for (
notification_type="Creation",
wmi_class="Win32_Process",
delay_secs=2,
Name='calc.exe'
)
calc_created = watcher ()
Now supports timeout on the call to watcher::
import pythoncom
import wmi
c = wmi.WMI (privileges=["Security"])
watcher1 = c.watch_for (
notification_type="Creation",
wmi_class="Win32_NTLogEvent",
Type="error"
)
watcher2 = c.watch_for (
notification_type="Creation",
wmi_class="Win32_NTLogEvent",
Type="warning"
)
while 1:
try:
error_log = watcher1 (500)
except wmi.x_wmi_timed_out:
pythoncom.PumpWaitingMessages ()
else:
print error_log
try:
warning_log = watcher2 (500)
except wmi.x_wmi_timed_out:
pythoncom.PumpWaitingMessages ()
else:
print warning_log
"""
if isinstance (wmi_class, _wmi_class):
class_name = wmi_class._class_name
else:
class_name = wmi_class
wmi_class = getattr (self, class_name)
is_extrinsic = "__ExtrinsicEvent" in wmi_class.derivation ()
if raw_wql:
wql = raw_wql
else:
fields = set (['TargetInstance'] + (fields or ["*"]))
field_list = ", ".join (fields)
if is_extrinsic:
if where_clause:
where = " WHERE " + " AND ".join (["%s = '%s'" % (k, v) for k, v in where_clause.items ()])
else:
where = ""
wql = "SELECT " + field_list + " FROM " + class_name + where
else:
if where_clause:
where = " AND " + " AND ".join (["TargetInstance.%s = '%s'" % (k, v) for k, v in where_clause.items ()])
else:
where = ""
wql =
"SELECT %s FROM __Instance%sEvent WITHIN %d WHERE TargetInstance ISA '%s' %s" %
(field_list, notification_type, delay_secs, class_name, where)
try:
return _wmi_watcher (
self._namespace.ExecNotificationQuery (wql),
is_extrinsic=is_extrinsic,
fields=fields
)
except pywintypes.com_error:
handle_com_error ()
0
Example 38
def __init__(self, traverser):
NATBase.__init__(self, traverser.logfunc)
self.upnpnat = None
self.port_collection = None
self.traverser = traverser
win32com.client.pythoncom.CoInitialize()
try:
self.upnpnat = win32com.client.Dispatch("HNetCfg.NATUPnP")
except pywintypes.com_error, e:
if (e[2][5] == -2147221005):
raise WindowsUPnPException("invalid class string")
else:
raise
try:
self.port_collection = self.upnpnat.StaticPortMappingCollection
if self.port_collection is None:
raise WindowsUPnPException("none port_collection")
except pywintypes.com_error, e:
#if e[1].lower() == "exception occurred.":
if (e[2][5] == -2147221164):
#I think this is Class Not Registered
#it happens on Windows 98 after the XP ICS wizard has been run
raise WindowsUPnPException("exception occurred, class not registered")
else:
raise
# attach service, so the queue gets flushed
self.traverser.attach_service(self)
0
Example 39
def wrapper(winerror_map, default_exception=x_winsys):
"""Used by each module to map specific windows error codes onto
Python exceptions. Always includes a default which is raised if
no specific exception is found.
"""
def _wrapped(function, *args, **kwargs):
"""Call a Windows API with parameters, and handle any
exception raised either by mapping it to a module-specific
one or by passing it back up the chain.
"""
try:
return function(*args, **kwargs)
except pywintypes.com_error as exception_info:
(hresult_code, hresult_name, additional_info, parameter_in_error) = exception_info.args
exception_string = ["%08X - %s" % (utils.signed_to_unsigned(hresult_code), hresult_name.decode("mbcs"))]
if additional_info:
wcode, source_of_error, error_description, whlp_file, whlp_context, scode = additional_info
exception_string.append(" Error in: %s" % source_of_error.decode("mbcs"))
exception_string.append(" %08X - %s" % (utils.signed_to_unsigned(scode), (error_description or "").decode("mbcs").strip()))
exception = winerror_map.get(hresult_code, default_exception)
raise exception(hresult_code, hresult_name, "n".join(exception_string))
except pywintypes.error as exception_info:
(errno, errctx, errmsg) = exception_info.args
exception = winerror_map.get(errno, default_exception)
raise exception(errno, errctx, errmsg)
except (WindowsError, IOError) as exception_info:
exception = winerror_map.get(exception_info.errno, default_exception)
if exception:
raise exception(exception_info.errno, "", exception_info.strerror)
return _wrapped
0
Example 40
def __init__ (self, ole_object, instance_of=None, fields=[], property_map={}):
try:
_set (self, "ole_object", ole_object)
_set (self, "id", ole_object.Path_.DisplayName.lower ())
_set (self, "_instance_of", instance_of)
_set (self, "properties", {})
_set (self, "methods", {})
_set (self, "property_map", property_map)
_set (self, "_associated_classes", None)
_set (self, "_keys", None)
if fields:
for field in fields:
self.properties[field] = None
else:
for p in ole_object.Properties_:
self.properties[p.Name] = None
for m in ole_object.Methods_:
self.methods[m.Name] = None
_set (self, "_properties", self.properties.keys ())
_set (self, "_methods", self.methods.keys ())
_set (self, "qualifiers", dict ((q.Name, q.Value) for q in self.ole_object.Qualifiers_))
except pywintypes.com_error:
handle_com_error ()
0
Example 41
def testIs(self):
self.failUnless(pythoncom.com_error is pywintypes.com_error)
0
Example 42
def register_port(self, mapping):
try:
self.port_collection.Add(mapping.external_port, mapping.protocol,
mapping.internal_port, mapping.host,
True, mapping.service_name)
self.logfunc(INFO, "registered: " + str(mapping), optional=False)
mapping.d.callback(mapping.external_port)
except pywintypes.com_error, e:
# host == 'fake' or address already bound
#if (e[2][5] == -2147024726):
# host == '', or I haven't a clue
#e.args[0] == -2147024894
#mapping.d.errback(e)
# detach self so the queue isn't flushed
self.traverser.detach_service(self)
if hasattr(mapping, 'original_external_port'):
mapping.external_port = mapping.original_external_port
del mapping.original_external_port
# push this mapping back on the queue
self.traverser.register_requests.append(mapping)
# resume init services, because we know we've failed
self.traverser.resume_init_services()
0
Example 43
def testIdentity(self):
exc = self._getException()
self.failUnless(exc.__class__ is pywintypes.com_error)
0
Example 44
def __getattr__ (self, attribute):
"""
Attempt to pass attribute calls to the proxied COM object.
If the attribute is recognised as a property, return its value;
if it is recognised as a method, return a method wrapper which
can then be called with parameters; otherwise pass the lookup
on to the underlying object.
"""
try:
if attribute in self.properties:
property = self._cached_properties (attribute)
factory = self.property_map.get (attribute, self.property_map.get (property.type, lambda x: x))
value = factory (property.value)
#
# If this is an association, certain of its properties
# are actually the paths to the aspects of the association,
# so translate them automatically into WMI objects.
#
if property.type.startswith ("ref:"):
return WMI (moniker=value)
else:
return value
elif attribute in self.methods:
return self._cached_methods (attribute)
else:
return getattr (self.ole_object, attribute)
except pywintypes.com_error:
handle_com_error ()
0
Example 45
def set (self, **kwargs):
"""Set several properties of the underlying object
at one go. This is particularly useful in combination
with the new () method below. However, an instance
which has been spawned in this way won't have enough
information to write pack, so only try if the
instance has a path.
"""
if kwargs:
try:
for attribute, value in kwargs.items ():
if attribute in self.properties:
self._cached_properties (attribute).set (value)
else:
raise AttributeError (attribute)
#
# Only try to write the attributes
# back if the object exists.
#
if self.ole_object.Path_.Path:
self.ole_object.Put_ ()
except pywintypes.com_error:
handle_com_error ()
0
Example 46
def _create_or_change_user(self, username, password, create,
password_expires):
try:
if create:
host = self._get_adsi_object()
user = host.Create('user', username)
else:
user = self._get_adsi_object(object_name=username,
object_type='user')
user.setpassword(password)
user.SetInfo()
self._set_user_password_expiration(username, password_expires)
except pywintypes.com_error as ex:
if create:
msg = "Create user failed: %s"
else:
msg = "Set user password failed: %s"
raise exception.CloudbaseInitException(msg % ex.excepinfo[2])
0
Example 47
def _query(self): # pylint: disable=E0202
"""
Query WMI using WMI Query Language (WQL) & parse the results.
Returns: List of WMI objects or `TimeoutException`.
"""
formated_property_names = ",".join(self.property_names)
wql = "Select {property_names} from {class_name}{filters}".format(
property_names=formated_property_names,
class_name=self.class_name,
filters=self.formatted_filters,
)
self.logger.debug(u"Querying WMI: {0}".format(wql))
try:
# From: https://msdn.microsoft.com/en-us/library/aa393866(v=vs.85).aspx
flag_return_immediately = 0x10 # Default flag.
flag_forward_only = 0x20
flag_use_amended_qualifiers = 0x20000
query_flags = flag_return_immediately | flag_forward_only
# For the first query, cache the qualifiers to determine each
# propertie's "CounterType"
includes_qualifiers = self.is_raw_perf_class and self._property_counter_types is None
if includes_qualifiers:
self._property_counter_types = CaseInsensitiveDict()
query_flags |= flag_use_amended_qualifiers
raw_results = self.get_connection().ExecQuery(wql, "WQL", query_flags)
results = self._parse_results(raw_results, includes_qualifiers=includes_qualifiers)
except pywintypes.com_error:
self.logger.warning(u"Failed to execute WMI query (%s)", wql, exc_info=True)
results = []
return results
0
Example 48
def associators (self, wmi_association_class="", wmi_result_class=""):
"""Return a list of objects related to this one, optionally limited
either by association class (ie the name of the class which relates
them) or by result class (ie the name of the class which would be
retrieved)::
c = wmi.WMI ()
pp = c.Win32_ParallelPort ()[0]
for i in pp.associators (wmi_association_class="Win32_PortResource"):
print i
for i in pp.associators (wmi_result_class="Win32_PnPEntity"):
print i
"""
try:
return [
_wmi_object (i) for i in
self.ole_object.Associators_ (
strAssocClass=wmi_association_class,
strResultClass=wmi_result_class
)
]
except pywintypes.com_error:
handle_com_error ()
0
Example 49
def references (self, wmi_class=""):
"""Return a list of associations involving this object, optionally
limited by the result class (the name of the association class).
NB Associations are treated specially; although WMI only returns
the string corresponding to the instance of each associated object,
this module will automatically convert that to the object itself::
c = wmi.WMI ()
sp = c.Win32_SerialPort ()[0]
for i in sp.references ():
print i
for i in sp.references (wmi_class="Win32_SerialPortSetting"):
print i
"""
#
# FIXME: Allow an actual class to be passed in, using
# its .Path_.RelPath property to determine the string
#
try:
return [_wmi_object (i) for i in self.ole_object.References_ (strResultClass=wmi_class)]
except pywintypes.com_error:
handle_com_error ()
0
Example 50
def MakeModuleForTypelib(typelibCLSID, lcid, major, minor, progressInstance = None, bGUIProgress = None, bForDemand = bForDemandDefault, bBuildHidden = 1):
"""Generate support for a type library.
Given the IID, LCID and version information for a type library, generate
and import the necessary support files.
Returns the Python module. No exceptions are caught.
Params
typelibCLSID -- IID of the type library.
major -- Integer major version.
minor -- Integer minor version.
lcid -- Integer LCID for the library.
progressInstance -- Instance to use as progress indicator, or None to
use the GUI progress bar.
"""
if bGUIProgress is not None:
print "The 'bGuiProgress' param to 'MakeModuleForTypelib' is obsolete."
import makepy
try:
makepy.GenerateFromTypeLibSpec( (typelibCLSID, lcid, major, minor), progressInstance=progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
except pywintypes.com_error:
return None
return GetModuleForTypelib(typelibCLSID, lcid, major, minor)