本文目录导读:

我来提供一个跨平台(Windows/macOS/Linux)的电池电量监控脚本方案:
Python 版本(跨平台)
#!/usr/bin/env python3
"""
电池电量监控脚本
支持 Windows / macOS / Linux
"""
import time
import sys
import subprocess
import platform
from datetime import datetime
try:
import psutil
except ImportError:
print("需要安装 psutil: pip install psutil")
sys.exit(1)
class BatteryMonitor:
def __init__(self, warning_threshold=20, critical_threshold=10):
self.warning_threshold = warning_threshold
self.critical_threshold = critical_threshold
self.last_notification = {}
def get_battery_status(self):
"""获取电池状态"""
try:
battery = psutil.sensors_battery()
if battery is None:
return None
percent = battery.percent
is_charging = battery.power_plugged
return {
'percent': percent,
'is_charging': is_charging,
'time_remaining': self._get_time_remaining(battery)
}
except Exception as e:
print(f"获取电池信息失败: {e}")
return None
def _get_time_remaining(self, battery):
"""获取剩余时间"""
if battery.secsleft and battery.secsleft != psutil.POWER_TIME_UNLIMITED:
hours = battery.secsleft // 3600
minutes = (battery.secsleft % 3600) // 60
return f"{hours}小时{minutes}分钟"
return "未知"
def check_alerts(self, status):
"""检查是否需要发送警告"""
if status is None:
return
percent = status['percent']
is_charging = status['is_charging']
# 只在非充电状态下检查电量警告
if not is_charging:
if percent <= self.critical_threshold:
self._send_notification("⚠️ 电量严重不足",
f"当前电量仅剩 {percent}%,请立即充电!")
elif percent <= self.warning_threshold:
notification_key = f"warning_{self.warning_threshold}"
# 防止重复通知(每30分钟最多一次)
last_time = self.last_notification.get(notification_key, 0)
if time.time() - last_time >= 1800:
self._send_notification("🔋 电量不足",
f"当前电量剩余 {percent}%,请及时充电。")
self.last_notification[notification_key] = time.time()
# 充电完成提醒
elif percent >= 100:
self._send_notification("✅ 充电完成", "电池已充满,可以拔掉电源了。")
def _send_notification(self, title, message):
"""发送系统通知"""
system = platform.system()
if system == "Windows":
self._windows_notification(title, message)
elif system == "Darwin": # macOS
self._mac_notification(title, message)
elif system == "Linux":
self._linux_notification(title, message)
print(f"[{datetime.now().strftime('%H:%M:%S')}] {title}: {message}")
def _windows_notification(self, title, message):
try:
# 使用PowerShell发送通知
import ctypes
ctypes.windll.user32.MessageBoxW(0, message, title, 0x40)
except:
pass
def _mac_notification(self, title, message):
try:
subprocess.run([
'osascript', '-e',
f'display notification "{message}" with title "{title}"'
], capture_output=True)
except:
pass
def _linux_notification(self, title, message):
try:
subprocess.run(['notify-send', '-u', 'normal', title, message],
capture_output=True)
except:
pass
def run(self, check_interval=60):
"""运行监控"""
print(f"电池监控已启动,每 {check_interval} 秒检查一次")
print(f"警告阈值: {self.warning_threshold}%, 严重阈值: {self.critical_threshold}%")
print("按 Ctrl+C 停止监控\n")
try:
while True:
status = self.get_battery_status()
if status:
self.print_status(status)
self.check_alerts(status)
time.sleep(check_interval)
except KeyboardInterrupt:
print("\n监控已停止")
def print_status(self, status):
"""打印电池状态"""
charging_icon = "⚡" if status['is_charging'] else "🔋"
print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} | "
f"{charging_icon} 电量: {status['percent']}% | "
f"状态: {'充电中' if status['is_charging'] else '放电中'} | "
f"预计剩余: {status['time_remaining']}")
def main():
import argparse
parser = argparse.ArgumentParser(description='电池电量监控脚本')
parser.add_argument('-w', '--warning', type=int, default=20,
help='警告阈值(默认20%)')
parser.add_argument('-c', '--critical', type=int, default=10,
help='严重警告阈值(默认10%)')
parser.add_argument('-i', '--interval', type=int, default=60,
help='检查间隔(秒,默认60秒)')
parser.add_argument('-n', '--normal', action='store_true',
help='正常模式(只显示,不警告)')
args = parser.parse_args()
monitor = BatteryMonitor(args.warning, args.critical)
monitor.run(args.interval)
if __name__ == '__main__':
main()
Windows 批处理脚本
@echo off电池电量监控
echo 电池监控启动...
echo 按 Ctrl+C 停止监控
echo.
:loop
for /f "tokens=2 delims==" %%i in ('wmic Path Win32_Battery Get EstimatedChargeRemaining /value') do set "battery=%%i"
set battery=%battery:~0,-2%
echo %time% - 当前电量: %battery%%%
if %battery% LEQ 20 (
msg * "警告:电池电量低于20%,请及时充电!"
)
if %battery% LEQ 10 (
msg * "严重警告:电量不足10%,请立即充电!"
)
timeout /t 60 /nobreak >nul
goto loop
Linux Shell 脚本
#!/bin/bash
# 电池监控脚本 (Linux)
while true; do
clear
date "+%Y-%m-%d %H:%M:%S"
# 获取电池状态
battery_info=$(cat /sys/class/power_supply/BAT0/capacity 2>/dev/null || echo "0")
status=$(cat /sys/class/power_supply/BAT0/status 2>/dev/null)
echo "电池电量: $battery_info%"
echo "状态: $status"
# 显示可视化电量
display_battery $battery_info
# 警告检查
if [[ "$status" == "Discharging" ]]; then
if [ "$battery_info" -le 20 ]; then
notify-send "警告" "电池电量低于20%,请及时充电!"
fi
if [ "$battery_info" -le 10 ]; then
notify-send -u critical "严重警告" "电量不足10%,请立即充电!"
fi
fi
sleep 60
done
display_battery() {
local percent=$1
local filled=$((percent / 10))
local empty=$((10 - filled))
echo -n "["
for ((i=0; i<filled; i++)); do echo -n "█"; done
for ((i=0; i<empty; i++)); do echo -n "░"; done
echo "] $percent%"
}
macOS 脚本
#!/bin/bash
# 电池监控脚本 (macOS)
while true; do
# 获取电池电量
battery_level=$(ioreg -l | awk '$10 ~ /MaxCapacity/ {capacity = $10}
$10 ~ /CurrentCapacity/ {current = $10}
END {printf "%.0f%%", current/capacity*100}')
# 获取充电状态
charging_status=$(ioreg -r -k AppleRawCurrentCapacity -d1 | grep -i "ExternalConnected" | awk '{print $NF}')
echo "$(date '+%Y-%m-%d %H:%M:%S') - 电量: $battery_level | 充电状态: $charging_status"
# 检查电量并通知
battery_num=${battery_level%\%}
if [[ "$charging_status" == "No" ]]; then
if [ "$battery_num" -le 20 ]; then
osascript -e 'display notification "电量不足,请充电" with title "电池警告"'
fi
if [ "$battery_num" -le 10 ]; then
osascript -e 'display notification "电量严重不足!" with title "严重警告" sound name "Glass"'
fi
fi
sleep 60
done
使用方法
Python版本(推荐)
# 安装依赖 pip install psutil # 基本使用 python battery_monitor.py # 自定义参数 python battery_monitor.py -w 30 -c 10 -i 120 # 参数说明: # -w: 警告阈值 (默认20%) # -c: 严重警告阈值 (默认10%) # -i: 检查间隔秒数 (默认60秒)
设置开机自启动(可选)
Windows 计划任务:
# 创建计划任务
schtasks /create /tn "BatteryMonitor" /tr "python ${PWD}\battery_monitor.py" /sc onstart
Linux 服务:
# 创建systemd服务 sudo nano /etc/systemd/system/battery-monitor.service [Unit] Description=Battery Monitor [Service] ExecStart=/usr/bin/python3 /path/to/battery_monitor.py Restart=always [Install] WantedBy=multi-user.target # 启用服务 sudo systemctl enable battery-monitor sudo systemctl start battery-monitor
功能特点
- 实时监控:持续监控电池状态
- 多级警告:支持警告和严重警告阈值
- 跨平台:Python版本支持所有主流系统
- 系统通知:发送系统级通知提醒
- 自定义配置:可调整各参数
需要我添加其他功能吗?比如日志记录、远程通知(邮件/微信/Telegram)等?