3
  1. 我创建了一个临时文件。
  2. 在创建的文件中添加了一些数据。
  3. 保存它,然后尝试删除它。

但我越来越WindowsError。我在编辑后关闭了文件。如何检查哪个其他进程正在访问该文件。

C:\Documents and Settings\Administrator>python
Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> __, filename = tempfile.mkstemp()
>>> print filename
c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
>>> fptr = open(filename, "wb")
>>> fptr.write("Hello World!")
>>> fptr.close()
>>> import os
>>> os.remove(filename)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by
       another process: 'c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb'
4

3 回答 3

11

文档中:

mkstemp() 返回一个元组,其中包含一个打开文件的操作系统级句柄(由 os.open() 返回)和该文件的绝对路径名,按此顺序。2.3 版中的新功能。

因此,mkstemp返回临时文件的操作系统文件句柄和文件名。当您重新打开临时文件时,原始返回的文件句柄仍处于打开状态(没有人阻止您在程序中打开两次或多次相同的文件)。

如果您想将该操作系统文件句柄作为 python 文件对象进行操作,您可以:

>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)

然后继续您的正常代码。

于 2009-09-24T17:02:49.250 回答
7

该文件仍处于打开状态。做这个:

fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)
于 2009-09-24T08:20:54.213 回答
0

我相信您需要释放 fptr 才能干净地关闭文件。尝试将 fptr 设置为无。

于 2009-09-24T08:16:06.523 回答