如何写一个脚本提醒喝水

wen 实用脚本 3

本文目录导读:

如何写一个脚本提醒喝水

  1. 为什么你总是忘记喝水?——被忽视的“隐性脱水”危机
  2. 脚本提醒的核心逻辑:不是“催命”,而是“顺势而为”
  3. 零基础方案:Windows/Mac/Linux 自带工具实现弹窗提醒
  4. 进阶玩法:用 Python + 桌面通知库,定制你的“智能水杯”
  5. 防打扰机制:如何避开会议、睡眠和专注时段?
  6. 效果翻倍技巧:联动手机推送与数据记录
  7. 高频问答:脚本失效怎么办?如何设置“喝水量递增”?

**
《久坐族的隐形救星:手把手教你打造一个“不烦人”的喝水提醒脚本(附全平台方案)》


目录导读

  1. 为什么你总是忘记喝水?——被忽视的“隐性脱水”危机
  2. 脚本提醒的核心逻辑:不是“催命”,而是“顺势而为”
  3. 零基础方案:Windows/Mac/Linux 自带工具实现弹窗提醒
  4. 进阶玩法:用 Python + 桌面通知库,定制你的“智能水杯”
  5. 防打扰机制:如何避开会议、睡眠和专注时段?(附代码片段)
  6. 效果翻倍技巧:联动手机推送(Pushover/Server酱)与数据记录
  7. 高频问答:脚本失效怎么办?如何设置“喝水量递增”?


为什么你总是忘记喝水?——被忽视的“隐性脱水”危机

你以为只有口渴才是缺水?医学研究表明,当大脑发出“口渴”信号时,身体已处于2%脱水状态,此时注意力和短期记忆已下降约10%,对于程序员、设计师、编辑等久坐群体,连续工作90分钟以上不喝水,血液粘稠度上升,甚至会增加泌尿系统结石风险。

但现实是:忙碌时真的想不起来,靠手机闹钟易被划掉,靠意念容易“明天再说”,这时,一个“低侵入、高重复”的脚本就是最优解——它不是强制打断你,而是像背景音乐一样,在合适的节奏里轻轻提醒。


脚本提醒的核心逻辑:不是“催命”,而是“顺势而为”

综合微软To-Do、番茄钟应用及行为心理学研究,一个优秀的喝水脚本应满足三原则

  • 频率自适应:工作强度高时缩短间隔(比如40分钟),休息时自动跳过。
  • 可推迟但不可取消:点击“稍后”后,脚本会在5分钟后重新提醒,但绝不提供“今天关闭”按钮。
  • 可视化反馈:不仅弹窗,最好能记录每日杯数,并显示“比昨天多1杯”的鼓励语。

零基础方案:Windows/Mac/Linux 自带工具实现弹窗提醒

不需要安装任何第三方软件,用系统自带功能即可。

Windows(任务计划程序 + Msg 命令)

  1. 打开“任务计划程序” → 创建基本任务 → 触发器设为“每天”,重复间隔选“40分钟”,持续“8小时”。
  2. 操作选“启动程序”,程序填 msg,参数填 * 该喝水了!别让肾结石找上你
  3. 若你的系统是Win10/11家庭版,msg可能被禁用,可改用PowerShell弹窗:
    • 操作程序填 powershell,参数填 -Command "Add-Type -AssemblyName PresentationFramework; [System.Windows.Forms.MessageBox]::Show('喝口水吧')"

Mac(AppleScript + 日历提醒)

  • 打开“脚本编辑器”,输入:
    display notification "该补水了" with title "健康提醒" sound name "Glass"
    保存为应用程序,然后在“日历”中设置重复闹钟,打开时选择该脚本。

Linux(notify-send)

  • 在 crontab 中添加:
    */40 * * * * DISPLAY=:0 notify-send -u critical "喝水时间" "现在是小口慢饮的最佳时机"

进阶玩法:用 Python + 桌面通知库,定制你的“智能水杯”

如果你会一点代码,推荐使用 Python 的 plyer 库(跨平台)或 win10toast(仅Windows)。

示例代码(Windows + win10toast):

import time
from win10toast import ToastNotifier
toaster = ToastNotifier()
def remind():
    toaster.show_toast(
        "💧 补水提醒",
        "连续工作40分钟了,喝150ml温水",
        duration=10,
        threaded=True
    )
while True:
    # 判断时段:9:00-18:00之间才提醒
    current_hour = time.localtime().tm_hour
    if 9 <= current_hour < 18:
        remind()
        # 避开12:00-13:00的午餐时间
        if not (12 <= current_hour < 13):
            time.sleep(2400)  # 40分钟
        else:
            time.sleep(3600)  # 午餐时休息1小时
    else:
        time.sleep(3600)  # 非工作时间每小时检查一次

进阶逻辑:

  • 读取当前鼠标键盘闲置时间,若超过15分钟则视为“离开座位”,跳过提醒。
  • 通过 random 模块随机在25-45分钟内波动间隔,避免形成“习惯性忽略”。

防打扰机制:如何避开会议、睡眠和专注时段?

脚本最怕“该提醒时不提醒,不该提醒时死命弹”,综合Google Calendar API和桌面日历检测,可以这样设置:

  • 静音时段:将 current_hour 判断改为读取 OutlookiCal 的日程关键词(如“会议”、“演示”),或用固定变量 BLOCKED_HOURS = [10, 14] 表示10点和14点不提醒。
  • 专注模式:如果检测到全屏应用(如PPT放映、代码IDE全屏),暂停提醒,可用 pygetwindow 库判断活动窗口标题。
import pygetwindow as gw
active = gw.getActiveWindow()
if active and ("PowerPoint" in active.title or "Visual Studio" in active.title):
    time.sleep(600)  # 10分钟后再检查

效果翻倍技巧:联动手机推送与数据记录

Server酱(免费)

  • 注册 Server酱,绑定微信,脚本通过 requests 库发送 GET 请求,即可在手机微信上收到“该喝水了”的通知。
  • 适合电脑静音或人不在工位时。

本地CSV记录 + 每日总结

  • 每提醒一次,写入一行时间戳,晚上用脚本统计当日杯数,并生成一句“你今天的喝水量达到标准了”或“比昨天多2杯”的反馈。

代码片段:

import csv
from datetime import datetime
with open('water_log.csv', 'a', newline='') as f:
    writer = csv.writer(f)
    writer.writerow([datetime.now().isoformat()])
# 晚上18点计算当日总数
with open('water_log.csv') as f:
    count = sum(1 for line in f if line.startswith('2025-'))
print(f"今天已提醒 {count} 次,累计约 {count*150} ml")

高频问答:脚本失效怎么办?如何设置“喝水量递增”?

Q1:定时任务里设置了,但就是不弹窗?

  • 检查系统权限:Windows任务计划程序需要勾选“使用最高权限运行”;macOS需在“系统设置→隐私与安全性→通知”中允许脚本发送通知。
  • 测试用简单命令(如 msgnotify-send “test”)是否能手动弹出,若不能,说明系统禁用了该通道。

Q2:我喝的是茶/咖啡,需要改提醒内容吗?

  • 建议将提醒文本改为“喝口温水或淡茶”,因为咖啡因有利尿作用,含水率需打8折计算。

Q3:如何实现“前半小时提醒一次,后半小时再提醒一次”?

  • 使用两个 time.sleep 变量:第一次提醒后设 sleep(1800),第二次提醒后设 sleep(1800),相当于每30分钟一次,但内容可分别设为“小口喝”和“补一大口”。

Q4:脚本能不能集成到智能手表?

  • 安卓/苹果生态可配合 Tasker快捷指令 读取电脑上的 Flask 接口,但复杂度较高,建议先用手机自带“喝水时间”App,脚本仅作为桌面补充。


一个好的喝水脚本,应当像一位沉默的管家——不打断你的灵感,但总在关键时刻递上一杯温度刚好的水,从今天起,花15分钟照着本文配置一个,一个月后你会感谢现在这个“动手的5分钟”。(完)

抱歉,评论功能暂时关闭!