用Python获取电池容量Windows

我正在考虑目前的电池容量和devise容量​​。

到目前为止,我可以使用的是使用Win32_Battery()类 ,它不提供我需要的所有信息(至less不是我的系统)。 我使用了纯Python的wmi库 。

另一方面,我发现这在Python中的作品,我怎么能检测到电脑是否在电池供电? ,但不幸的是它并没有提供有关容量的任何信息。

电池信息结构和电池状态结构似乎是完美的。 现在我知道我必须使用DeviceIoControl函数来完成这个工作,并且我发现这个C ++代码可以解释一点。

我宁愿只是简单地使用ctypes而不是pywin32提供的python win32api。 如果你有一个想法如何在Python中做到这一点,请让我知道!

提前致谢。

Tim Golden的优秀wmi模块,我相信会给你想要的一切。 你只需要做几个查询来获得一切:

 import wmi c = wmi.WMI() t = wmi.WMI(moniker = "//./root/wmi") batts1 = c.CIM_Battery(Caption = 'Portable Battery') for i, b in enumerate(batts1): print 'Battery %d Design Capacity: %d mWh' % (i, b.DesignCapacity or 0) batts = t.ExecQuery('Select * from BatteryFullChargedCapacity') for i, b in enumerate(batts): print ('Battery %d Fully Charged Capacity: %d mWh' % (i, b.FullChargedCapacity)) batts = t.ExecQuery('Select * from BatteryStatus where Voltage > 0') for i, b in enumerate(batts): print '\nBattery %d ***************' % i print 'Tag: ' + str(b.Tag) print 'Name: ' + b.InstanceName print 'PowerOnline: ' + str(b.PowerOnline) print 'Discharging: ' + str(b.Discharging) print 'Charging: ' + str(b.Charging) print 'Voltage: ' + str(b.Voltage) print 'DischargeRate: ' + str(b.DischargeRate) print 'ChargeRate: ' + str(b.ChargeRate) print 'RemainingCapacity: ' + str(b.RemainingCapacity) print 'Active: ' + str(b.Active) print 'Critical: ' + str(b.Critical) 

这当然不是跨平台的,它需要第三方资源,但它确实工作得很好。

检索此信息最可靠的方法是使用GetSystemPowerStatus而不是WMI。 psutil在Linux,Windows和FreeBSD下公开这些信息:

 >>> import psutil >>> >>> def secs2hours(secs): ... mm, ss = divmod(secs, 60) ... hh, mm = divmod(mm, 60) ... return "%d:%02d:%02d" % (hh, mm, ss) ... >>> battery = psutil.sensors_battery() >>> battery sbattery(percent=93, secsleft=16628, power_plugged=False) >>> print("charge = %s%%, time left = %s" % (batt.percent, secs2hours(batt.secsleft))) charge = 93%, time left = 4:37:08 

相关的提交在这里 。