首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在长时间运行的子进程退出后清理临时文件夹

问在长时间运行的子进程退出后清理临时文件夹
EN

Stack Overflow用户
提问于 2010-05-12 09:45:16
回答 1查看 360关注 0票数 1

我有一个Python脚本(在另一个应用程序中运行),它生成一堆临时图像。然后我使用subprocess启动一个应用程序来查看这些内容。

当图像查看过程存在时,我想删除临时图像。

我不能在Python中这样做,因为Python进程可能在子进程完成之前就退出了。也就是说,我不能做以下事情:

代码语言:javascript
复制
p = subprocess.Popen(["imgviewer", "/example/image1.jpg", "/example/image1.jpg"])
p.communicate()
os.unlink("/example/image1.jpg")
os.unlink("/example/image2.jpg")

..as这会阻塞主线程,我也无法检查线程中是否存在pid等

我能想到的唯一解决方案就是我不得不使用shell=True,我宁愿避免这样做:

代码语言:javascript
复制
import pipes
import subprocess

cmd = ['imgviewer']
cmd.append("/example/image2.jpg")

for x in cleanup:
    cmd.extend(["&&", "rm", pipes.quote(x)])

cmdstr = " ".join(cmd)
subprocess.Popen(cmdstr, shell = True)

这是可行的,但很难说得上优雅。

基本上,我有一个背景子进程,并希望在它退出时删除临时文件,即使Python进程不再存在。

EN

回答 1

Stack Overflow用户

发布于 2010-05-12 10:11:10

如果您使用的是Unix的任何变体,您可以派生Python程序,让父进程继续它的生命,同时子进程守护进程,运行查看器(如果这会阻止子进程,这至少没有关系,因为子进程在生活中没有其他工作;-),并在它之后进行清理。原始的Python进程可能存在,也可能不存在,但“等待清理”子进程当然会存在(毕竟,某个进程或其他进程必须进行清理,对吧?-)。

如果你在Windows上,或者需要跨平台代码,那么让你的Python程序“衍生”(即从子进程开始,然后继续运行)另一个(小得多的)程序,它的任务是运行查看器(阻塞,谁关心),然后进行清理。(如果在Unix上,即使在这种情况下,您也可能希望执行守护进程,否则子进程可能会在父进程执行守护进程时消失)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2815665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档