本文目录导读:

我来帮你编写一个闹钟管理脚本,这里提供Python和Shell两种版本:
Python版本(推荐)
#!/usr/bin/env python3
"""
闹钟管理脚本
功能:设置、查看、删除闹钟,支持多种闹钟类型
"""
import json
import os
import time
import threading
import platform
import subprocess
from datetime import datetime, timedelta
from pathlib import Path
class AlarmManager:
def __init__(self, storage_file="alarms.json"):
self.storage_file = Path(storage_file)
self.alarms = self.load_alarms()
self.running = False
def load_alarms(self):
"""加载闹钟数据"""
if self.storage_file.exists():
try:
with open(self.storage_file, 'r') as f:
return json.load(f)
except json.JSONDecodeError:
print("警告:闹钟文件损坏,将创建新的闹钟列表")
return []
def save_alarms(self):
"""保存闹钟数据"""
with open(self.storage_file, 'w') as f:
json.dump(self.alarms, f, indent=2, ensure_ascii=False)
def add_alarm(self, time_str, message="起床啦!", repeat=False, sound=True):
"""添加闹钟
time_str: 时间字符串,格式 HH:MM
message: 闹钟消息
repeat: 是否重复(每天)
sound: 是否播放声音
"""
try:
# 验证时间格式
alarm_time = datetime.strptime(time_str, "%H:%M")
alarm = {
"id": len(self.alarms) + 1,
"time": time_str,
"message": message,
"repeat": repeat,
"sound": sound,
"enabled": True,
"created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.alarms.append(alarm)
self.save_alarms()
print(f"✅ 闹钟已添加:{time_str} - {message}")
return True
except ValueError:
print("❌ 时间格式错误,请使用 HH:MM 格式(如 07:30)")
return False
def list_alarms(self):
"""列出所有闹钟"""
if not self.alarms:
print("📋 暂无闹钟")
return
print("\n📋 闹钟列表:")
print("-" * 50)
for alarm in self.alarms:
status = "🟢" if alarm["enabled"] else "🔴"
repeat_mark = "🔁" if alarm["repeat"] else "🔂"
sound_mark = "🔊" if alarm["sound"] else "🔇"
print(f"{status} ID:{alarm['id']} | {alarm['time']} | {alarm['message']} | {repeat_mark}{sound_mark}")
print("-" * 50)
def delete_alarm(self, alarm_id):
"""删除闹钟"""
for i, alarm in enumerate(self.alarms):
if alarm["id"] == alarm_id:
self.alarms.pop(i)
self.save_alarms()
print(f"🗑️ 闹钟 {alarm_id} 已删除")
return True
print(f"❌ 未找到 ID 为 {alarm_id} 的闹钟")
return False
def toggle_alarm(self, alarm_id):
"""启用/禁用闹钟"""
for alarm in self.alarms:
if alarm["id"] == alarm_id:
alarm["enabled"] = not alarm["enabled"]
self.save_alarms()
status = "启用" if alarm["enabled"] else "禁用"
print(f"🔄 闹钟 {alarm_id} 已{status}")
return True
print(f"❌ 未找到 ID 为 {alarm_id} 的闹钟")
return False
def play_sound(self):
"""播放声音"""
system = platform.system().lower()
try:
if system == "darwin": # macOS
subprocess.run(["afplay", "/System/Library/Sounds/Submarine.aiff"],
timeout=5)
elif system == "linux":
# 尝试多种方式播放声音
try:
subprocess.run(["paplay", "/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga"],
timeout=5)
except:
# 使用系统蜂鸣声
print('\a')
elif system == "windows":
import winsound
winsound.Beep(1000, 500) # 频率1000Hz,持续500ms
except Exception as e:
print(f"⚠️ 播放声音失败:{e}")
def check_alarms(self):
"""检查闹钟是否到时间"""
while self.running:
now = datetime.now()
current_time = now.strftime("%H:%M")
for alarm in self.alarms:
if not alarm["enabled"]:
continue
if alarm["time"] == current_time:
print(f"\n⏰ 闹钟时间到!ID:{alarm['id']} - {alarm['message']}")
if alarm["sound"]:
self.play_sound()
# 如果不是重复闹钟,自动禁用
if not alarm["repeat"]:
alarm["enabled"] = False
self.save_alarms()
# 每30秒检查一次
time.sleep(30)
def start(self):
"""启动闹钟监控"""
if self.alarms:
print("🚀 闹钟监控已启动")
self.running = True
thread = threading.Thread(target=self.check_alarms, daemon=True)
thread.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
self.stop()
else:
print("📋 没有闹钟需要监控")
def stop(self):
"""停止闹钟监控"""
self.running = False
print("\n🛑 闹钟监控已停止")
def main():
"""主函数"""
manager = AlarmManager()
print("=" * 50)
print("⏰ 闹钟管理脚本")
print("=" * 50)
while True:
print("\n📌 命令菜单:")
print("1. 添加闹钟")
print("2. 查看闹钟")
print("3. 删除闹钟")
print("4. 启用/禁用闹钟")
print("5. 启动监控")
print("6. 退出")
choice = input("\n请输入选择 (1-6): ").strip()
if choice == "1":
time_str = input("请输入时间 (HH:MM): ").strip()
message = input("请输入提醒信息 (默认: 起床啦!): ").strip() or "起床啦!"
repeat = input("是否每天重复?(y/n, 默认: n): ").strip().lower() == "y"
sound = input("是否播放声音?(y/n, 默认: y): ").strip().lower() != "n"
manager.add_alarm(time_str, message, repeat, sound)
elif choice == "2":
manager.list_alarms()
elif choice == "3":
manager.list_alarms()
try:
alarm_id = int(input("请输入要删除的闹钟ID: "))
manager.delete_alarm(alarm_id)
except ValueError:
print("❌ 请输入有效的ID")
elif choice == "4":
manager.list_alarms()
try:
alarm_id = int(input("请输入要切换状态的闹钟ID: "))
manager.toggle_alarm(alarm_id)
except ValueError:
print("❌ 请输入有效的ID")
elif choice == "5":
manager.start()
elif choice == "6":
print("👋 再见!")
break
else:
print("❌ 无效选择,请重新输入")
if __name__ == "__main__":
main()
Shell版本(简单任务提醒)
#!/bin/bash
# alarm.sh - 简单的闹钟脚本
# 闹钟存储文件
ALARM_FILE="$HOME/.alarms.json"
# 添加闹钟
add_alarm() {
local time=$1
local message=$2
# 时间格式验证
if [[ ! $time =~ ^[0-9]{2}:[0-9]{2}$ ]]; then
echo "❌ 时间格式错误,请使用 HH:MM 格式"
return 1
fi
# 创建JSON格式闹钟
local alarm="{\"time\":\"$time\",\"message\":\"$message\",\"enabled\":true}"
# 存储闹钟
if [ -f "$ALARM_FILE" ]; then
# 在现有关闭括号前插入新闹钟
sed -i 's/]/ ,'$alarm'\n]/' "$ALARM_FILE"
else
echo "[$alarm]" > "$ALARM_FILE"
fi
echo "✅ 闹钟已添加:$time - $message"
}
# 查看闹钟
list_alarms() {
if [ ! -f "$ALARM_FILE" ]; then
echo "📋 暂无闹钟"
return
fi
echo "📋 闹钟列表:"
cat "$ALARM_FILE" | python3 -c "
import json, sys
try:
alarms = json.load(sys.stdin)
for i, alarm in enumerate(alarms, 1):
status = '🟢' if alarm.get('enabled', True) else '🔴'
print(f'{status} {i}. {alarm[\"time\"]} - {alarm[\"message\"]}')
except:
print('读取闹钟失败')
"
}
# 删除闹钟
delete_alarm() {
local id=$1
python3 -c "
import json
with open('$ALARM_FILE', 'r') as f:
alarms = json.load(f)
if 1 <= $id <= len(alarms):
deleted = alarms.pop($id - 1)
with open('$ALARM_FILE', 'w') as f:
json.dump(alarms, f, indent=2)
print(f'✅ 闹钟已删除: {deleted[\"time\"]} - {deleted[\"message\"]}')
else:
print('❌ 无效ID')
"
}
# 监控闹钟
monitor_alarms() {
echo "🚀 闹钟监控已启动 (按 Ctrl+C 停止)"
while true; do
if [ -f "$ALARM_FILE" ]; then
local current_time=$(date +%H:%M)
# 检查闹钟是否到时间
python3 -c "
import json, time, platform, subprocess
with open('$ALARM_FILE', 'r') as f:
alarms = json.load(f)
current_time = '$current_time'
for alarm in alarms:
if alarm.get('enabled', True) and alarm['time'] == current_time:
print(f'⏰ 闹钟时间到!{alarm[\"message\"]}')
# 播放声音
system = platform.system().lower()
try:
if system == 'darwin':
subprocess.run(['afplay', '/System/Library/Sounds/Submarine.aiff'], timeout=3)
elif system == 'linux':
subprocess.run(['paplay', '/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga'], timeout=3)
elif system == 'windows':
import winsound
winsound.Beep(1000, 500)
except:
pass
# 禁用非重复闹钟
alarm['enabled'] = False
"
fi
sleep 30
done
}
# 主菜单
main() {
echo "=" * 50
echo "⏰ 闹钟管理脚本"
echo "=" * 50
while true; do
echo ""
echo "📌 命令菜单:"
echo "1. 添加闹钟"
echo "2. 查看闹钟"
echo "3. 删除闹钟"
echo "4. 启动监控"
echo "5. 退出"
read -p "请输入选择 (1-5): " choice
case $choice in
1)
read -p "请输入时间 (HH:MM): " time
read -p "请输入提醒信息: " message
add_alarm "$time" "$message"
;;
2)
list_alarms
;;
3)
list_alarms
read -p "请输入要删除的闹钟编号: " id
delete_alarm $id
;;
4)
monitor_alarms
;;
5)
echo "👋 再见!"
exit 0
;;
*)
echo "❌ 无效选择"
;;
esac
done
}
# 运行主函数
main
使用方法
Python版本:
# 保存为 alarm.py chmod +x alarm.py ./alarm.py
Shell版本:
# 保存为 alarm.sh chmod +x alarm.sh ./alarm.sh
功能特点
- 添加闹钟:支持指定时间、消息、是否重复
- 查看闹钟:显示所有闹钟状态
- 删除闹钟:按ID删除
- 启用/禁用:临时开关闹钟
- 声音提醒:自动播放声音
- 持久化存储:闹钟数据保存在JSON文件中
这个脚本可以根据你的需求进一步定制,比如添加更多闹钟类型、美化界面等。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播