Найти - Пользователи
Полная версия: ActivePython: получение информации о типе COM-объекта
Начало » Python для экспертов » ActivePython: получение информации о типе COM-объекта
1
Все ники заняты
На языке VBScript часто можно получить информацию о типе COM-объекта, что бывает удобно (например, чтобы быстро найти необходимую информацию в MSDN):
Set obj = CreateObject("ADODB.Connection")
WScript.Echo TypeName(obj)
Такой скрипт выдаст: “Connection”.
Однако, аналогичный скрипт на Python не выдаёт такой информации:
# -*- coding: cp1251 -*-
import win32com.client
obj = win32com.client.Dispatch("ADODB.Connection")
print type(obj)
Такой скрипт выдаст: “<type ‘instance’>”.
Есть ли способ получить информативное сообщение на Python?
slivlen
В com особо не шарю, так что может не совсем то что надо :)
>>> import win32com.client
>>> o=win32com.client.Dispatch('ADODB.Connection')
>>> print repr(o)
<COMObject ADODB.Connection>
>>>
Все ники заняты
Спасибо, это лучше, чем <type ‘instance’> :).
Все ники заняты
Хотя… Пользы от этого тоже мало :). Функция repr похоже выдаёт информацию только об объектах, “непосредственно” созданных в скрипте. О возвращаемых вещах она ничего не знает. Например:
# -*- coding: cp1251 -*-
import win32com.client
shell = win32com.client.Dispatch("Shell.Application")
folder = shell.NameSpace("C:\\")
print repr(folder)
Выдаст: “<COMObject <unknown>>”. VBScript в такой ситуации выдаст “Folder3”, что гораздо информативнее.
bialix
сделай dir(folder) и посмотри какие методы/атрибуты есть у этого объекта. может там найдется что-то типа name, type, getname, gettype.
eugene
По-моему нужно смотреть в сторону COM Makepy utility.
Подробней можно глянуть здесь http://www.oreilly.com/catalog/pythonwin32/chapter/ch12.html
Андрей Светлов
Нужно брать ITypeInfo у IDispatch и потом его изучать. Например, GetDocumentation с индексом -1 дает докстринги для самого объекта, а не его функций.


def getType(disp):
ti = disp._oleobj_.GetTypeInfo(0)
return ti.GetDocumentation(-1)

import win32com.client
shell = win32com.client.Dispatch(“Shell.Application”)
folder = shell.NameSpace(“C:\\”)
print getType(folder)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB