但我得到了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'
答案 0 :(得分:11)
mkstemp()返回一个元组,该元组包含一个打开文件的操作系统级句柄(如os.open()所返回的)以及该文件的绝对路径名。版本2.3中的新功能。
因此,mkstemp
同时返回的OS文件句柄和临时文件的文件名。当您重新打开临时文件时,原始返回的文件句柄仍然打开(没有人阻止您在程序中打开两次或更多相同的文件)。
如果您想将该OS文件句柄作为python文件对象操作,您可以:
>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)
然后继续使用正常代码。
答案 1 :(得分:6)
该文件仍处于打开状态。这样做:
fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)
答案 2 :(得分:0)
我相信你需要释放fptr来干净地关闭文件。尝试将fptr设置为None。