psutil.disk_usage()比df -h更准确可靠,需传标准化挂载点路径(如'/'或r'c:'),结合cron/schedule定时监控并按百分比+绝对余量双阈值报警。

直接用 psutil + schedule 或系统 cron 就能稳定跑,别碰 os.popen('df') 解析字符串这种容易崩的写法。
用 psutil.disk_usage() 获取准确剩余空间
Linux/macOS/Windows 都兼容,返回的是字节单位的 namedtuple,比解析 df -h 输出可靠得多。注意路径必须是挂载点(比如 '/'、'C:\'),不是任意目录。
常见错误:传入 '/home/user' 导致报错 FileNotFoundError;或没处理 Windows 路径斜杠方向,导致在跨平台脚本中出问题。
- Linux 示例:
psutil.disk_usage('/')→ 返回根分区使用情况 - Windows 示例:
psutil.disk_usage('C:\')→ 注意双反斜杠或原始字符串r'C:' - 想查所有挂载点?遍历
psutil.disk_partitions(),过滤掉fstype == ''(如 tmpfs)和mountpoint为空的项
定时触发选 schedule 还是系统 cron?
schedule 适合开发调试或轻量任务(比如每5分钟查一次),但 Python 进程必须常驻;生产环境强烈建议用系统级调度——Linux 用 cron,Windows 用 Task Scheduler。否则进程被 kill 或机器重启后就停了。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
用 schedule 容易踩的坑:time.sleep(1) 必须加在循环里,否则脚本一跑完就退出;日志不落盘的话,出错时根本不知道哪次失败了。
- Linux cron 示例:
*/10 * * * * /usr/bin/python3 /path/to/disk_check.py >> /var/log/disk.log 2>&1(每10分钟执行) - 避免在
schedule.every().hour.at(':30').do(...)中用硬编码时间,服务器时区配置不一致会导致错峰 - 如果必须用
schedule,加上while True: schedule.run_pending(); time.sleep(60),别漏sleep
报警逻辑不能只看“剩余 GB”,得算百分比 + 设置阈值
磁盘总大小差异极大(从几十 GB 到几十 TB),只判断 free (10GB)会误报大容量盘,也漏报小容量盘。必须结合使用率计算:
usage = disk_usage.percent # float 类型,如 87.3
还要注意:某些云服务器的根分区是动态扩容的,total 可能变化,所以阈值建议设为固定百分比(如 >90%)+ 绝对余量(如
- 别用
disk_usage.free直接比较,它包含 reserved space(root 用户保留空间),普通用户看到的可用空间更少 - Linux 下
df显示的Available列 ≈psutil.disk_usage().free,但psutil不暴露 reserved 值,所以百分比最稳妥 - 发邮件/钉钉报警时,带上
disk_usage.total和disk_usage.used,方便快速判断是否要清理还是扩容
真正难的不是取数,而是让脚本在不同服务器上长期不死、不漏报、不狂轰告警——cron + 日志轮转 + 百分比阈值组合,比任何花哨的框架都管用。路径写死、时区忽略、没捕获 PermissionError(比如查 /proc 下某些挂载点),这三处出问题的概率最高。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










