本文目录导读:

我来提供一个跨平台(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)等?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播