我需要创建一个我只使用一次的文件夹,但需要在下次运行之前存在它.看起来我应该在标准库中使用tmp_file模块,但我不知道如何获得我想要的行为.
目前,我正在执行以下操作来创建目录:
randName = "temp" + str(random.randint(1000, 9999)) os.makedirs(randName)
当我想删除目录时,我只需要查找一个带有"temp"的目录.
这似乎是一个肮脏的黑客,但我不确定目前更好的方式.
顺便说一下,我需要文件夹的原因是我启动了一个使用以下文件夹的进程:
subprocess.Popen([command], shell=True).pid
然后退出我的脚本让其他进程完成工作.
使用4位随机数创建文件夹是不安全的,您还需要担心与程序的其他实例发生冲突.
一个更好的方法是使用创建文件夹tempfile.mkdtemp
,它完全符合您的要求(即当您的脚本退出时不会删除该文件夹).然后,您将文件夹名称作为参数传递给第二个Popen'ed脚本,它将负责删除它.
你所建议的是危险的.如果其他人试图创建这些目录,您可能会遇到竞争条件 - 包括您的应用程序的其他实例.此外,删除任何包含"temp"的内容可能会导致删除超出您的意图.正如其他人提到的那样,tempfile.mkdtemp可能是最安全的方式.以下是您所描述的示例,包括启动子进程以使用新目录.
import tempfile import shutil import subprocess d = tempfile.mkdtemp(prefix='tmp') try: subprocess.check_call(['/bin/echo', 'Directory:', d]) finally: shutil.rmtree(d)