如何从tempfile.mkstemp关闭文件?

Hoo*_*ked 23 python ulimit

在我的机器Linux机器ulimit -n给出1024.这段代码:

from tempfile import mkstemp

for n in xrange(1024 + 1):
    f, path = mkstemp()    
Run Code Online (Sandbox Code Playgroud)

在最后一行循环失败:

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
Run Code Online (Sandbox Code Playgroud)

好像我已经打开了许多文件-但typefpath仅仅是intstr,所以我不知道如何关闭每个我已经打开的文件.如何从tempfile.mkstemp关闭文件?

Fré*_*idi 26

由于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)
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 16

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

  • 只是解释一下.mkstemp()返回一个unix文件描述符,所以你要使用它你需要使用fdopen打开它或使用os close函数:os.close() (9认同)

Mar*_*mro 5

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

import os
from tempfile import mkstemp

# Open a file
fd, path = mkstemp()  

# Close opened file
os.close( fd )
Run Code Online (Sandbox Code Playgroud)