我有一个 Python 程序,它需要创建一个命名的临时文件,该文件将在程序运行过程中打开和关闭几次,并且在程序退出时应该被删除。不幸的是,tempfile
似乎没有一个选项有效:
TemporaryFile
没有可见的名字NamedTemporaryFile
创建一个类似文件的对象。我只需要一个文件名。我尝试关闭它返回的对象(在设置之后delete = False
),但是当我稍后尝试打开文件时出现流错误。SpooledTemporaryFile
没有可见的名字mkstemp
返回打开的文件对象和名称;它不保证程序退出时文件被删除mktemp
返回文件名,但不保证程序退出时文件被删除
我尝试在上下文管理器中使用mktemp
1 ,如下所示:
def get_temp_file(suffix):
class TempFile(object):
def __init__(self):
self.name = tempfile.mktemp(suffix = '.test')
def __enter__(self):
return self
def __exit__(self, ex_type, ex_value, ex_tb):
if os.path.exists(self.name):
try:
os.remove(self.name)
except:
print sys.exc_info()
return TempFile()
...但这给了我一个WindowsError(32, 'The process cannot access the file because it is being used by another process')
. 该文件名由我的程序生成的进程使用,即使我确保该进程在我退出之前完成,它似乎有一个我无法控制的竞争条件。
处理这个问题的最佳方法是什么?
1我这里不用担心安全问题;这是测试模块的一部分,所以最坏的人可以做的就是导致我们的单元测试虚假地失败。惊恐的事件!