WMI, запрашивающий проблемы в Python - PullRequest
2 голосов
/ 21 января 2010

Недавно я работал над тестовым скриптом Squish и пытался сделать что-то вроде того, что описано в решении по адресу: Общий объем памяти, используемый процессом Python?

Соответствующие фрагменты из моего кода:

def measureMemory():
    w = wmi.WMI('.')
    result = w.query("SELECT WorkingSet FROM Win32_PerfRawData_PerfProc_Process WHERE Name=\"some_program\"")
    print result
    for WorkingSet in result:
        print WorkingSet
    subset = result[0]
    print subset['WorkingSet']
    # return result[0]['WorkingSet']

for i in range(50):
    memory = measureMemory()
    if memory:
        # test.passes("%d memory used during undo." % memory)
        print memory

К сожалению, я сталкиваюсь с ошибкой всякий раз, когда пытаюсь запустить устройство, как показано ниже.

[<_wmi_object: \\USER-PC\root\cimv2:Win32_PerfRawData_PerfProc_Process.Name="some_program">]

instance of Win32_PerfRawData_PerfProc_Process
{
    Name = "some_program";
    WorkingSet = "19386368";
};

Traceback (most recent call last):
  File "C:\Python26\Test scripts\Testify", line 25, in -toplevel-
    memory = measureMemory()
  File "C:\Python26\Test scripts\Testify", line 19, in measureMemory
    print subset['WorkingSet']
  File "C:\Python24\Lib\site-packages\win32com\client\dynamic.py", line 242, in __getitem__
    raise TypeError("This object does not support enumeration")
TypeError: This object does not support enumeration

Я не уверен, почему это должно приводить к ошибке, поскольку я не думаю, что я изменил что-то существенное из примера, из которого я взял код. Я использую Python 2.4.4, если это важно, и, к сожалению, я не могу обновить, независимо от того, насколько это может помочь.

1 Ответ

2 голосов
/ 24 октября 2010

Синтаксис WMI, похоже, изменился по сравнению с примерами. Попробуйте использовать subset.WorkingSet вместо subset ['WorkingSet']

...