我在玩pygame,我想做的一件事就是在电脑使用电池时减少每秒的帧数(以降低CPU使用率并延长电池寿命)。
如何从Python中检测计算机当前是否使用电池供电?
我在Windows上使用Python 3.1。
发布于 2011-05-28 03:03:47
如果不想使用win32api
,可以使用内置的ctypes
模块。我通常在不使用win32api
的情况下运行CPython,所以我比较喜欢这些解决方案。
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
发布于 2017-02-02 04:01:20
在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
>>>
发布于 2017-07-25 04:10:16
跨平台电源状态指示的一个简单方法是' power‘模块,您可以使用pip安装该模块
import power
ans = power.PowerManagement().get_providing_power_source_type()
if not ans:
print "plugged into wall socket"
else:
print "on battery"
https://stackoverflow.com/questions/6153860
复制相似问题