2012-03-30 22 views
19

Trên máy tính Linux của tôi ulimit -n cho 1024. Mã này:Làm cách nào để đóng các tệp từ tempfile.mkstemp?

from tempfile import mkstemp 

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

thất bại tại vòng lặp dòng cuối cùng với:

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 

Nó có vẻ như tôi đã mở nhiều file - nhưng type của fpath chỉ đơn giản là intstr vì vậy tôi 'không chắc chắn làm thế nào để đóng mỗi tập tin mà tôi đã mở. Làm cách nào để đóng các tệp từ tempfile.mkstemp?

Trả lời

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

Chỉ cần để giải thích một chút. mkstemp() trả về một bộ mô tả tập tin unix, vì vậy bạn làm việc với nó, bạn cần mở nó bằng fdopen hoặc sử dụng hàm đóng os: os.close() – turtlebender

+0

Cảm ơn, @turtlebender. – unutbu

22

Kể từ mkstemp() lợi nhuận một bộ mô tả tập tin thô, bạn có thể sử dụng 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

Sử dụng os.close() để đóng bộ mô tả file:

import os 
from tempfile import mkstemp 

# Open a file 
fd, path = mkstemp() 

# Close opened file 
os.close(fd) 
Các vấn đề liên quan