[英]Can't access temporary files created with tempfile
我正在使用tempfile.NamedTemporaryFile()
来存储一些文本,直到程序结束。 在 Unix 上工作没有任何问题,但在 Windows 上,无法读取或写入返回的文件:python 提供 Errno 13。唯一的方法是设置delete=False
并使用os.remove()
手动删除文件。 为什么?
这将导致IOError,因为文件创建后只能打开一次。
原因是因为NamedTemporaryFile
在Windows上创建带有FILE_SHARE_DELETE
标志的文件。 在Windows上,当使用特定共享标记创建/打开文件时,所有后续打开操作都必须通过此共享标记。 Python的open
函数不是通过FILE_SHARE_DELETE
标志的情况并非FILE_SHARE_DELETE
。 请参阅我关于如何创建可由子进程读取的临时文件的答案? 有关更多详细信息和解决方法的问题。
看看: http : //docs.python.org/2/library/tempfile.html
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
此函数的操作与TemporaryFile()完全相同,只是保证文件在文件系统中具有可见的名称(在Unix上,目录条目未取消链接)。 可以从文件对象的名称属性中检索该名称。 在命名的临时文件仍处于打开状态时,是否可以使用该名称第二次打开文件,会因平台而异(可以在Unix上使用; 在Windows NT或更高版本上不能使用 )。 如果delete为true(默认设置),则在关闭文件后立即将其删除。
感谢@Rnhmjoj,这是一个可行的解决方案:
file = NamedTemporaryFile(delete=False)
file.close()
您必须使用delete
-flag 保留文件,然后在创建后将其关闭。 这样,Windows 将解锁文件,您可以使用它来做事!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.