Send2Trash:跨平台文件回收,一个函数搞定
Send2Trash:跨平台文件回收,一个函数搞定
send2trash 在 GitHub 上拿到了 309 Star。
做桌面应用开发的人都会碰到这个问题:用户点了删除,到底该真删还是送回收站。真删了用户反悔找不回来,不删又占着磁盘。Send2Trash 解决的就是这个,它调用各平台原生的回收机制,把文件送进回收站或废纸篓。
1、 这库是干嘛的
就一件事,跨平台把文件安全送到系统回收站。
Windows 上调用 IFileOperation(Vista 及以上),这是系统标准回收接口。旧版本系统上自动降级到 SHFileOperation。macOS 通过 FSMoveObjectToTrashSync 的 Cocoa 原生调用来实现,也可以退一步用 pyobjc 的 NSFileManager。Linux 优先用 GIO,不可用时走 freedesktop.org 的 trash 规范协议,自己处理 .Trash 目录的创建和文件元数据记录。
每个平台至少有两层方案,首选原生接口,不可用则降级到备选。平台检测和接口选择都在运行时自动处理,调用方不需要关心底层差异,一份代码在所有系统上表现一致。所有底层调用通过 ctypes 完成,不需要 C 编译器和额外构建步骤,装完即用。

2、 为什么不用 shutil.rmtree
shutil.rmtree 和 os.remove 走直接删除路径,文件从磁盘消失,没有挽回余地。用户点错了就彻底没救。系统维护脚本处理临时文件用它们问题不大,面向用户的桌面工具就需要更谨慎的方案。
Send2Trash 走回收站路径。用户反悔了可以打开回收站恢复,和操作系统自带的删除行为一致。用户眼里的删除就是进回收站,直接擦除不符合直觉。Python 标准库里目前没有提供跨平台的回收站接口,这个库正好填补了这块空白。
两个库各有定位,开发者可以根据场景做选择。项目维护者在征集各平台的问题反馈,碰到回收失败的情况可以给项目提 issue。
3、 安装
通过 pip 安装:
pip install -U send2trash
需要操作系统的原生库支持时(pywin32 或 pyobjc),装带 extra 的版本:
pip install -U send2trash[nativeLib]
原生库只用来启用更底层接口,不是强制依赖。不装也能正常运行。Linux 系统如果开启 PEP 668 保护,建议在虚拟环境中安装。

4、 使用
接口只有一个 send2trash 函数:
from send2trash import send2trash
send2trash('some_file')
send2trash(['some_file1', 'some_file2'])
单文件路径和路径列表都支持。调用后文件进入系统回收站,和用户在文件管理器按删除键效果一样。
Linux 上有个边界情况。文件所在设备不是用户主目录所在设备,且根目录没有 .Trash 目录,也没有权限创建 .Trash-$UID 目录时,send2trash 会抛出 TrashPermissionError。应用层捕获后做降级处理,比如提示用户手动清理。其他异常走 OSError。两类异常的处理策略不同,桌面应用建议分开捕获。
5、 适合哪些人用
- 写文件管理器或桌面工具的开发者,需要删除操作和系统回收站一致
- 需要批量处理文件但不想冒数据丢失风险的 Python 脚本
- 任何需要给删除操作留撤回余地的场景
Send2Trash 轻量、接口简单、不引入多余抽象。跨平台安全删除的需求,它是最直接的选择。项目代码在 GitHub 上开源,有问题可以直接提 issue 或贡献 pr。
多余抽象。跨平台安全删除的需求,它是最直接的选择。项目代码在 GitHub 上开源,有问题可以直接提 issue 或贡献 pr。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)