当前位置: 首页 > 面试题库 >

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

简学文
2023-03-14
问题内容

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

如何通过Python检测计算机当前是否由电池供电?

我在Windows上使用Python 3.1。


问题答案:

如果您不希望这样做,则win32api可以使用内置ctypes模块。我通常在不使用CPython的情况下运行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


 类似资料:
  • 问题内容: 当设备的电池电量不足时,我想关闭我的应用程序。我在清单中添加了以下代码。 并在接收器中遵循以下代码 我正在模拟器上运行该应用程序,并使用telnet更改了电池电量。它会更改电池电量,但不会显示任何吐司或记录。 我想念什么?任何帮助表示赞赏!谢谢。 问题答案: 在代码中而不是在文件中注册您的接收器。 或使用接收器收听电池电量。

  • 问题内容: 我有一个Python脚本,该脚本定期循环运行,以对我的照明系统进行调整。当我关闭计算机时,我希望我的脚本能够检测到该问题,然后完全关闭灯。 如何检测我的计算机开始在Python中关闭? 或者,假设Windows向Python发送了“关闭时间”通知,我该如何拦截它以杀死我的灯并退出循环? 问题答案: 您应该对消息作出反应。 当用户注销或计算机关闭时,将发送此消息。 如果要应对睡眠/休眠以

  • 问题内容: 我正在尝试在客户端计算机上安装Java Windows应用程序。我想检查计算机上是否安装了必需的JRE。我想通过Java程序而不是通过cmd命令进行检查 问题答案: 如果您使用的是Windows或Linux操作系统,则在命令提示符/终端中输入 如果正确安装了Java,那么您将得到类似的内容 旁注: 在Windows操作系统上安装Java之后,将PATH变量更改为添加java.exe,因

  • 本文向大家介绍如何检测MySQL中是否存在表?,包括了如何检测MySQL中是否存在表?的使用技巧和注意事项,需要的朋友参考一下 要检测表的存在,请使用INFORMATION_SCHEMA.TABLES的概念。以下是语法- 要了解上述语法,让我们创建一个表- 这是检测数据库中是否存在表的查询- 这将产生以下输出-

  • 问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即:

  • 我需要帮助检查数据库中是否存在行。在我的例子中,该行包含一个电子邮件地址。我得到的结果是: 这是我目前使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的例子中,检查MySQL中是否存在电子邮件)?