我有一個Python腳本(在另一個應用程序內部運行)生成一堆臨時圖像。然後我使用subprocess
來啓動一個應用程序來查看這些。在長時間運行的子進程退出後清理臨時文件夾
當圖像查看過程存在時,我想刪除臨時圖像。
我不能從Python做到這一點,因爲Python進程可能已經在子進程完成之前退出。即我不能做到以下幾點:
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
,我寧願迴避:
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)
這工作,但幾乎沒有優雅..
基本上,我有一個背景和基礎d子進程,並且要在退出時刪除臨時文件,即使Python進程不再存在。
難道你不能只追加'rm'命令,以便subshell在串行中運行兩個命令? imageviewer /example/image1.jpg /example/image2.jpg;rm -f /example/*.jpg 還要注意commands.mkarg()函數來處理子命令中的轉義空格。 – 2010-05-12 02:05:05