You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置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是专门的定时任务库,语法更直观,适合重复执行的定时场景:

  1. 先安装库:
pip install schedule
  1. 示例代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:05:19