2012-03-30 24 views
19

Makinemde, ulimit -n numaralı Linux makinesinde 1024 verilir. basitçe int ve str yüzden ancak f ve path ait type vardır - Ben birçok dosyalara açtıktan gibiDosyaları tempfile.mkstemp'den nasıl kapatabilirim?

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 

Öyle görünüyor: Bu kod:

from tempfile import mkstemp 

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

ile son satır döngü başarısız Açtığım her dosyayı nasıl kapatacağımı bilmiyorum. Dosyaları tempfile.mkstemp'den nasıl kapatabilirim?

cevap

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

Sadece bir açıklama. mkstemp() bir unix dosya tanımlayıcısını döndürür, böylece onunla çalışmanız gerekir ya fdopen'i kullanarak açın veya os kapatma işlevini kullanın: os.close() – turtlebender

+0

Teşekkürler, @turtlebender. – unutbu

22

mkstemp() yana döner bir ham dosya tanımlayıcısı, sen os.close() kullanabilirsiniz:

import os 
from tempfile import mkstemp 

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

Kullanım os.close() dosya tanımlayıcısı kapatmak için:

import os 
from tempfile import mkstemp 

# Open a file 
fd, path = mkstemp() 

# Close opened file 
os.close(fd) 
İlgili konular