我正在玩pygame,我想要做的一件事就是减less计算机使用电池时的每秒帧数(降低CPU使用率并延长电池寿命)。
我如何从Python检测电脑当前是否使用电池供电?
我在Windows上使用Python 3.1。
如果你想在没有win32api
情况下使用,你可以使用内置的ctypes
模块。 我通常运行CPython没有win32api
,所以我有点像这些解决方案。
这对于GetSystemPowerStatus()
来说是一个小小的工作,因为你必须定义SYSTEM_POWER_STATUS
结构,但不是坏的。
# Get power status of the system using ctypes to call GetSystemPowerStatus import ctypes from ctypes import wintypes class SYSTEM_POWER_STATUS(ctypes.Structure): _fields_ = [ ('ACLineStatus', wintypes.BYTE), ('BatteryFlag', wintypes.BYTE), ('BatteryLifePercent', wintypes.BYTE), ('Reserved1', wintypes.BYTE), ('BatteryLifeTime', wintypes.DWORD), ('BatteryFullLifeTime', wintypes.DWORD), ] SYSTEM_POWER_STATUS_P = ctypes.POINTER(SYSTEM_POWER_STATUS) GetSystemPowerStatus = ctypes.windll.kernel32.GetSystemPowerStatus GetSystemPowerStatus.argtypes = [SYSTEM_POWER_STATUS_P] GetSystemPowerStatus.restype = wintypes.BOOL status = SYSTEM_POWER_STATUS() if not GetSystemPowerStatus(ctypes.pointer(status)): raise ctypes.WinError() print 'ACLineStatus', status.ACLineStatus print 'BatteryFlag', status.BatteryFlag print 'BatteryLifePercent', status.BatteryLifePercent print 'BatteryLifeTime', status.BatteryLifeTime print 'BatteryFullLifeTime', status.BatteryFullLifeTime
在我的系统上打印这个(基本上意思是“桌面,插入”):
ACLineStatus 1 BatteryFlag -128 BatteryLifePercent -1 BatteryLifeTime 4294967295 BatteryFullLifeTime 4294967295
很容易,所有你需要做的就是从Python调用Windows API函数GetSystemPowerStatus ,可能通过导入 win32api
模块。
编辑: GetSystemPowerStatus()
尚未在win32api
实施生成219(2014-05-04)。
你看过sysinfo吗?
通过谷歌搜索,我发现似乎可以使用sysinfo
。
在C中检索这些信息的最可靠的方法是使用GetSystemPowerStatus 。 如果没有电池存在, ACLineStatus
将被设置为128
。 psutil在Linux,Windows和FreeBSD下暴露这个信息,所以要检查电池是否存在,你可以这样做
>>> import psutil >>> has_battery = psutil.sensors_battery() is not None
如果电池存在,并且想要知道电源线是否插入,则可以这样做:
>>> import psutil >>> psutil.sensors_battery() sbattery(percent=99, secsleft=20308, power_plugged=True) >>> psutil.sensors_battery().power_plugged True >>>
跨平台电源状态指示的简单方法是可以用pip安装的“电源”模块
import power ans = power.PowerManagement().get_providing_power_source_type() if not ans: print "plugged into wall socket" else: print "on battery"