如何在python中从WMI获取64位值

2024-09-27 23:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行以下代码时:

def get_process_info(pid):
    c = wmi.WMI(namespace='root\\cimv2')
    obj = c.Win32_Process(ProcessId = pid)[0]
    print "VirtualSize:", obj.wmi_property('VirtualSize').type
    print "VirtualSize:", obj.wmi_property('VirtualSize').Value

def get_perf_info(pid):
    c = wmi.WMI(namespace='root\\cimv2')
    obj = c.Win32_PerfFormattedData_PerfProc_Process(IDProcess = pid)[0]
    print "PrivateBytes:", obj.wmi_property('PrivateBytes').type
    print "PrivateBytes:", obj.wmi_property('PrivateBytes').Value

对于一个占用大量内存的进程,我得到的结论是:

^{pr2}$

请注意,这两个值都列为64位值,但PrivateBytes值为0xFFFFFFFF。如果我使用“WMI Explorer”,我可以看到PrivateBytes值大于32位: wmi image

我的问题是如何在PrivateBytes的64位荣耀中访问它?在

除了这个WMI模块之外,有没有其他方法可以从python读取WMI?在


Tags: infoobjgetdefpropertyrootwminamespace
1条回答
网友
1楼 · 发布于 2024-09-27 23:17:18

您可以使用为WMI提供命令行界面的wmic

def find_privatebytes(pid):
    with os.popen('wmic process list full /format:csv') as csvfile:
        reader = csv.reader(csvfile, delimiter=',', quotechar='"')
        crow = 0
        col_pid = 0
        col_pb  = 0

        for row in reader:
            if len(row) == 0:
                continue
            if crow == 0:                
                col_pid = row.index("ProcessId")
                col_pb  = row.index("PrivatePageCount")
                crow += 1
            elif int(row[col_pid]) == pid:
                return int(row[col_pb])
        return 0

相关问题 更多 >

    热门问题