繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM