无法访问使用tempfile创建的临时文件

时间:2013-03-23 15:06:45

标签: python windows

我使用tempfile.NamedTemporaryFile()存储一些文本,直到程序结束。在Unix上工作没有任何问题,但在Windows上,返回的文件无法读取或写入:python提供Errno 13.唯一的方法是设置delete=False并手动删除os.remove()文件。为什么呢?

2 个答案:

答案 0 :(得分:5)

  

这会导致IOError,因为文件只能在创建后打开一次。

原因是因为NamedTemporaryFile在Windows上创建了带有FILE_SHARE_DELETE标记的文件。在Windows上,当使用特定共享标志创建/打开文件时,所有后续打开操作都必须传递此共享标志。 Python的open函数不会传递FILE_SHARE_DELETE标志。有关详细信息和解决方法,请参阅我在How to create a temporary file that can be read by a subprocess?问题上的回答。

答案 1 :(得分:1)

看看:http://docs.python.org/2/library/tempfile.html

 tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])

此函数与TemporaryFile()完全相同,但保证文件在文件系统中具有可见名称(在Unix上,目录条目未取消链接)。可以从文件对象的name属性中检索该名称。名称是否可以用于再次打开文件,而命名的临时文件仍然是打开的,因此在各个平台上都有所不同(它可以在Unix上使用; 它不能在Windows NT或更高版本上) 。如果delete为true(默认值),则文件一关闭就会被删除。