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

| 我正在玩pygame,我想做的一件事是减少计算机依靠电池供电时的每秒帧数(以降低CPU使用率并延长电池寿命)。 如何通过Python检测计算机当前是否由电池供电? 我在Windows上使用Python 3.1。     
已邀请:
        如果要在没有
win32api
的情况下进行操作,则可以使用内置的
ctypes
模块。我通常在没有ѭ0的情况下运行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
    
        很简单,您要做的就是从Python调用Windows API函数GetSystemPowerStatus,可能是通过导入import0ѭ模块。 编辑:截至版本219(2014-05-04)尚未在
win32api
中实现
GetSystemPowerStatus()
。     
        在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
>>> 
    
        跨平台电源状态指示的一种简单方法是\'power \'模块,您可以通过pip进行安装
    import power
    ans = power.PowerManagement().get_providing_power_source_type()
    if not ans:
        print \"plugged into wall socket\"
    else:
        print \"on battery\"
    
        您可以安装
acpi
。来自维基百科   在计算机中,高级配置和电源接口提供了开放标准,操作系统可使用该标准来发现和配置计算机硬件组件,通过使未使用的组件进入睡眠状态来执行电源管理以及执行状态监视。 然后在python中使用
subprocess
模块
import subprocess
cmd = \'acpi -b\'

# for python 3.7+
p = subprocess.run(cmd.split(), shell=True, capture_output=True)
battery_info, error = p.stdout.decode(), p.stderr.decode()

# for python3.x (x<6)
battery_info = subprocess.check_output(cmd.split(), shell=True).decode(\'utf-8\')

print (battery_info) 
    

要回复问题请先登录注册