如何关闭tempfile.mkstemp创建的文件?

31
在我的Linux机器上,ulimit -n 命令返回 1024。以下是相关代码:

from tempfile import mkstemp

for n in xrange(1024 + 1):
    f, path = mkstemp()    

最后一行循环出现错误:

Traceback (most recent call last):
  File "utest.py", line 4, in <module>
  File "/usr/lib/python2.7/tempfile.py", line 300, in mkstemp
  File "/usr/lib/python2.7/tempfile.py", line 235, in _mkstemp_inner
OSError: [Errno 24] Too many open files: '/tmp/tmpc5W3CF'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 64, in apport_excepthook
ImportError: No module named fileutils

看起来我打开了太多的文件 - 但是 fpath 的类型只是 intstr,因此我不确定如何关闭我打开的每个文件。如何关闭从tempfile.mkstemp打开的文件?

3个回答

34

mkstemp()返回一个原始的文件描述符,因此您可以使用os.close()

import os
from tempfile import mkstemp

for n in xrange(1024 + 1):
    f, path = mkstemp()
    # Do something with 'f'...
    os.close(f)

17
import tempfile
import os
for idx in xrange(1024 + 1):
    outfd, outsock_path = tempfile.mkstemp()
    outsock = os.fdopen(outfd,'w')
    outsock.close()

10
简要解释一下,mkstemp()函数返回一个Unix文件描述符,如果你要使用它,你需要使用fdopen打开它,或者使用os.close()函数关闭它。 - turtlebender

5

使用os.close()关闭文件描述符:

import os
from tempfile import mkstemp

# Open a file
fd, path = mkstemp()  

# Close opened file
os.close( fd )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接