如何设置Python提醒代码在每日特定时间运行?
实现特定时间触发的Python桌面提醒
用户现有基于winsound和win10toast的Python提醒代码,希望配置为一天中特定时间触发运行,尝试用time.sleep()实现但未成功,寻求可行方案。
原代码及问题
原提醒代码(存在语法错误)
import winsound from win10toast import ToastNotifier def timer(reminder, seconds): notificator = ToastNotifier() # 错误:ToastNotifier初始化无需传参,show_toast才是显示通知的方法 notificator = ToastNotifier("Reminder", f"""Alarm will go off in (seconds) Seconds.""", duration=20) notificator.show_toast(f"Reminder", reminder, duration=20) # 警报音 frequency = 2500 duration = 1000 winsound.Beep(frequency, duration) if __name__ == "__main__": words = input("What shall i be reminded of: ") sec = int(input("Enter seconds: ")) timer(words, sec)
尝试的代码(仅简单延迟,无法指定具体时间)
import time local_time = float(input()) local_time = local_time * 60 time.sleep(local_time)
可行解决方案
第一步:修正原代码的语法错误
先修复提醒函数的基础逻辑,确保通知和提示音能正常工作:
import winsound from win10toast import ToastNotifier def show_reminder(reminder_content): # 初始化通知器 notificator = ToastNotifier() # 显示桌面通知 notificator.show_toast("定时提醒", reminder_content, duration=20) # 播放提示音 winsound.Beep(2500, 1000)
第二步:实现特定时间触发的两种方案
方案1:计算时间差,用time.sleep()延迟执行
核心逻辑是获取当前时间与目标时间的差值,将差值转为秒后休眠,到达时间后触发提醒:
import time from datetime import datetime import winsound from win10toast import ToastNotifier def show_reminder(reminder_content): notificator = ToastNotifier() notificator.show_toast("定时提醒", reminder_content, duration=20) winsound.Beep(2500, 1000) if __name__ == "__main__": # 获取用户输入的目标时间(格式如"14:30") target_time_str = input("请输入触发提醒的时间(格式HH:MM):") reminder_content = input("请输入提醒内容:") target_hour, target_minute = map(int, target_time_str.split(":")) while True: now = datetime.now() current_hour, current_minute = now.hour, now.minute # 到达目标时间则触发提醒 if current_hour == target_hour and current_minute == target_minute: show_reminder(reminder_content) # 避免同一分钟重复触发,休眠60秒 time.sleep(60) else: # 构造目标时间对象,若已过今日则自动设为明日 target_today = now.replace(hour=target_hour, minute=target_minute, second=0, microsecond=0) if target_today < now: target_today = target_today.replace(day=now.day + 1) # 计算并休眠到目标时间的秒数 time_diff = (target_today - now).total_seconds() time.sleep(time_diff)
方案2:使用schedule库(更简洁)
schedule是专门的定时任务库,语法更直观,适合重复执行的定时场景:
- 先安装库:
pip install schedule
- 示例代码:
import schedule import time import winsound from win10toast import ToastNotifier def show_reminder(reminder_content): notificator = ToastNotifier() notificator.show_toast("定时提醒", reminder_content, duration=20) winsound.Beep(2500, 1000) if __name__ == "__main__": target_time_str = input("请输入触发提醒的时间(格式HH:MM):") reminder_content = input("请输入提醒内容:") # 设置每天在目标时间执行提醒 schedule.every().day.at(target_time_str).do(show_reminder, reminder_content) print(f"已设置每天{target_time_str}的提醒:{reminder_content}") # 保持程序运行,监听定时任务 while True: schedule.run_pending() time.sleep(1)
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

