2013-03-23 64 views
2

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

+0

你能告诉我们你使用它的代码吗?需要'delete = False'作为解决方法意味着它将被删除,因为您关闭了该文件。 – 2013-03-23 15:10:17

+0

好的,我发现了这个问题。有时候文件需要被删除,为此我使用'open(tempfile.name,“w”)。close()'。这会导致IOError,因为该文件在创建后只能打开一次。现在,如何删除其内容而无需再次打开它? – Rnhmjoj 2013-03-23 17:14:51

+0

我想你想*截断*文件;调用'.seek(0)'然后'.truncate()'。 – 2013-03-23 17:44:40

回答

2

这会导致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

请看: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或更高版本中使用)。如果删除为真(默认),则该文件在关闭后立即删除。

+0

我刚刚尝试过使用TemporaryFile():同样的问题。问题一定是别的。 – Rnhmjoj 2013-03-23 16:45:30

相关问题