2012-03-30 87 views
19

在我的机器上Linux机器ulimit -n给出1024。此代码:如何关闭tempfile.mkstemp中的文件?

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 

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

回答

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

只是解释了一下。 mkstemp()返回一个unix文件描述符,所以你需要使用fdopen打开它或使用os关闭函数:os.close() – turtlebender 2012-03-30 13:48:59

+0

谢谢,@turtlebender。 – unutbu 2012-03-30 13:49:35

22

由于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) 
2

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

import os 
from tempfile import mkstemp 

# Open a file 
fd, path = mkstemp() 

# Close opened file 
os.close(fd)