Linux Mint下Python PIL的image.show()显示时长过短问题咨询
问题解答
不需要修改系统临时文件删除机制,这并非最优方案,反而可能导致系统临时文件堆积,占用磁盘空间。
为什么图片会自动消失?
PIL的image.show()方法工作逻辑如下:
- 将生成的图片保存到系统临时目录(如
/tmp)的临时文件中; - 调用系统默认图片查看器打开该文件;
- 一方面,Python脚本执行结束后,PIL会自动清理这个临时文件;另一方面,Linux Mint自带的
systemd-tmpfiles服务会定期清理/tmp目录下超时的文件,这就是你看到图片20-30秒后消失的原因。
更合理的解决方法
方法1:手动保存到非临时目录
放弃依赖show()的临时文件,先将图片保存到你指定的固定目录,再调用查看器打开:
from PIL import Image import subprocess image = Image.new(mode="RGB", size=(X,Y), color=(255,255,255)) # 替换为你的自定义保存路径 save_path = "/home/你的用户名/Desktop/test_image.png" image.save(save_path) # 调用系统默认查看器打开 subprocess.run(["xdg-open", save_path])
这种方式下文件不会被自动清理,你可以随时查看。
方法2:自定义PIL查看器保留临时文件
如果一定要用show()方法,可以自定义查看器逻辑,让临时文件不被自动删除:
from PIL import Image from PIL.ImageShow import Viewer class PersistentViewer(Viewer): def save_image(self, image): # 获取临时文件路径,不自动删除 temp_file = self.get_temp_file(image.format) image.save(temp_file) return temp_file # 注册自定义查看器 Image.register_viewer("persistent", PersistentViewer()) image = Image.new(mode="RGB", size=(X,Y), color=(255,255,255)) # 使用自定义查看器打开 image.show(viewer="persistent")
注意:这种方法生成的临时文件需要你手动删除,避免磁盘空间浪费。
方法3:调整系统临时文件清理策略(不推荐)
如果坚持修改系统机制,可编辑/etc/systemd/tmpfiles.d/tmp.conf文件,修改/tmp目录的清理规则,比如延长文件保留时间:
# 将临时文件保留时长改为7天 D /tmp 1777 root root 7d
然后重启清理服务:
sudo systemctl restart systemd-tmpfiles-clean.service
但此方法会让所有临时文件都保留更久,容易造成磁盘空间被无用文件占用,不建议采用。
内容的提问来源于stack exchange,提问作者Vadim Kashtanov
相关产品推荐
相关产品推荐

