2012-03-30 12 views
19

मेरी मशीन पर लिनक्स मशीन ulimit -n1024 देता है। f और path की type लेकिन बस int और str तो मैं कर रहे हैं -मैं tempfile.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 

ऐसा लगता है जैसे मैं कई फाइलों को खोल दिया है: यह कोड:

from tempfile import mkstemp 

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

साथ अंतिम पंक्ति पाश में विफल रहता है मुझे यकीन नहीं है कि मैंने जो फाइल खोली है उसे बंद करना है। मैं 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() एक यूनिक्स फ़ाइल डिस्क्रिप्टर देता है, इसलिए आप इसके साथ काम करने के लिए आपको या तो fdopen का उपयोग करके खोलने की आवश्यकता है या ओएस क्लोज फ़ंक्शन का उपयोग करें: os.close() – turtlebender

+0

धन्यवाद, @ टर्टलेबेंडर। – unutbu

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) 
संबंधित मुद्दे