Python中的WMI查询问题

2 投票
1 回答
1672 浏览
提问于 2025-04-15 18:17

我最近在写一个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

WMI的写法好像和之前的例子不太一样了。试试用subset.WorkingSet来代替subset['WorkingSet']。

撰写回答