[英]How to get 64-bit value from WMI in 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
對於使用大量內存的進程,我得到了這個:
VirtualSize: uint64
VirtualSize: 5015498752
PrivateBytes: uint64
PrivateBytes: 4294967295
請注意,兩者都列為64位值,但PrivateBytes值為0xFFFFFFFF。 如果我使用“WMI Explorer”,我可以看到PrivateBytes值大於32位:
我的問題是如何以完整的64位榮耀訪問PrivateBytes?
除了這個WMI模塊之外,還有其他方法可以從python中讀取WMI嗎?
您可以使用wmic為WMI提供命令行界面:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.