在Python中,如何检测计算机是否使用电池供电?

我正在玩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"