【问题标题】:How do I close the files from tempfile.mkstemp?如何关闭 tempfile.mkstemp 中的文件?
【发布时间】:2012-04-14 04:58:16
【问题描述】:

在我的机器上,Linux 机器 ulimit -n 提供 1024。这段代码:

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 中的文件?

【问题讨论】:

    标签: python ulimit


    【解决方案1】:

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

    import os
    from tempfile import mkstemp
    
    # Open a file
    fd, path = mkstemp()  
    
    # Close opened file
    os.close( fd )
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        import tempfile
        import os
        for idx in xrange(1024 + 1):
            outfd, outsock_path = tempfile.mkstemp()
            outsock = os.fdopen(outfd,'w')
            outsock.close()
        

        【讨论】:

        • 只是解释一下。 mkstemp() 返回一个 unix 文件描述符,所以要使用它,您需要使用 fdopen 打开它或使用 os close 函数:os.close()
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 2016-12-03
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        相关资源
        最近更新 更多