6

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

4

3 回答 3

5

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

原因是因为在 Windows 上NamedTemporaryFile创建带有FILE_SHARE_DELETE标志的文件。在 Windows 上,当使用特定共享标志创建/打开文件时,所有后续打开操作都必须传递此共享标志。open不传递FILE_SHARE_DELETE标志的 Python 函数并非如此。请参阅我关于如何创建可由子进程读取的临时文件的答案?有关更多详细信息和解决方法的问题。

于 2013-03-23T18:03:56.227 回答
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 上,目录条目未取消链接)。该名称可以从文件对象的名称属性中检索。在命名的临时文件仍处于打开状态时,该名称是否可用于第二次打开文件,因平台而异(在 Unix 上可以这样使用;在 Windows NT 或更高版本上不能)。如果 delete 为 true(默认值),则文件一关闭就会被删除。

于 2013-03-23T15:11:05.490 回答
0

感谢@Rnhmjoj,这是一个可行的解决方案:

    file = NamedTemporaryFile(delete=False)
    file.close()

您必须使用delete-flag 保留文件,然后在创建后将其关闭。这样,Windows 将解锁文件,您可以使用它来做事!

于 2022-01-13T07:59:27.790 回答