首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中,如何检测计算机是否使用电池供电?

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

Stack Overflow用户
提问于 2011-05-27 22:43:26
回答 4查看 8.9K关注 0票数 21

我在玩pygame,我想做的一件事就是在电脑使用电池时减少每秒的帧数(以降低CPU使用率并延长电池寿命)。

如何从Python中检测计算机当前是否使用电池供电?

我在Windows上使用Python 3.1。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-28 03:03:47

如果不想使用win32api,可以使用内置的ctypes模块。我通常在不使用win32api的情况下运行CPython,所以我比较喜欢这些解决方案。

GetSystemPowerStatus()的工作稍微多一点,因为您必须定义SYSTEM_POWER_STATUS结构,但还不错。

代码语言:javascript
运行
复制
# 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)

在我的打印这个的系统上(基本上意味着“桌面,插入”):

代码语言:javascript
运行
复制
ACLineStatus 1
BatteryFlag -128
BatteryLifePercent -1
BatteryLifeTime 4294967295
BatteryFullLifeTime 4294967295
票数 18
EN

Stack Overflow用户

发布于 2017-02-02 04:01:20

在C中检索此信息的最可靠方法是使用GetSystemPowerStatus。如果没有电池,ACLineStatus将设置为128psutil会在Linux、Windows和FreeBSD下公开此信息,因此要检查电池是否存在,可以执行以下操作

代码语言:javascript
运行
复制
>>> import psutil
>>> has_battery = psutil.sensors_battery() is not None

如果有电池,并且您想知道电源线是否已插入,您可以执行以下操作:

代码语言:javascript
运行
复制
>>> import psutil
>>> psutil.sensors_battery()
sbattery(percent=99, secsleft=20308, power_plugged=True)
>>> psutil.sensors_battery().power_plugged
True
>>> 
票数 9
EN

Stack Overflow用户

发布于 2017-07-25 04:10:16

跨平台电源状态指示的一个简单方法是' power‘模块,您可以使用pip安装该模块

代码语言:javascript
运行
复制
    import power
    ans = power.PowerManagement().get_providing_power_source_type()
    if not ans:
        print "plugged into wall socket"
    else:
        print "on battery"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6153860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档