我在Python中创建一个类,其中一个方法需要处理文件并将它们保存在临时目录中。方法完成后,临时目录将被删除。我需要临时目录可用于整个脚本,而不仅仅是方法。
import tempfile
import os
class sandbox:
def start_tmp_dir():
temp_dir = tempfile.TemporaryDirectory()
print('tmp dir available in start_tmp_dir: ' + str(os.path.isdir(temp_dir.name)))
return temp_dir.name
def use_tmp_dir(dir_name):
print('tmp dir available in use_tmp_dir: ' + str(os.path.isdir(dir_name)))
if __name__ == "__main__":
sandbox = sandbox
dir_name = sandbox.start_tmp_dir()
sandbox.use_tmp_dir(dir_name)
输出:
tmp dir available in start_tmp_dir: True
tmp dir available in use_tmp_dir: False
Python手册says this:
完成上下文或销毁临时目录 对象新创建的临时目录及其所有内容 从文件系统中删除。
鉴于我创建的示例,这是有道理的。文档还讨论了使用with
和上下文管理器,但我似乎无法使其中任何一个工作。
答案 0 :(得分:1)
创建该类的实例并使用self.temp_dir
,只要对象/实例存在,它就会存在。
import tempfile
import os
class Sandbox(): # uppercase - see "PEP 8 -- Style Guide for Python Code"
def start_tmp_dir(self): # self
self.temp_dir = tempfile.TemporaryDirectory() # self.temp_dir
print('tmp dir available in start_tmp_dir: ' + str(os.path.isdir(self.temp_dir.name))) # self.temp_dir
return self.temp_dir.name # self.temp_dir
def use_tmp_dir(self, dir_name):
print('tmp dir available in use_tmp_dir: ' + str(os.path.isdir(dir_name)))
if __name__ == "__main__":
sandbox = Sandbox() # uppercase and ()
dir_name = sandbox.start_tmp_dir()
sandbox.use_tmp_dir(dir_name)
答案 1 :(得分:0)
要实现这一点,您需要将其用作上下文管理器。像这样:
#!/usr/bin/python
import tempfile
import os
class Sandbox(object):
def __init__(self, temp_dir):
self.temp_dir = temp_dir
print('tmp dir available in constructor: ' + str(os.path.isdir(self.temp_dir)))
def use_tmp_dir(self):
print('tmp dir available in use_tmp_dir: ' + str(os.path.isdir(self.temp_dir)))
if __name__ == "__main__":
with tempfile.TemporaryDirectory() as temp_dir:
s = Sandbox(temp_dir)
s.use_tmp_dir()