【问题标题】:does closing a file opened with os.fdopen close the os-level fd?关闭用 os.fdopen 打开的文件会关闭操作系统级别的 fd 吗?
【发布时间】:2011-10-30 03:41:49
【问题描述】:

我正在使用tempfile.mkstemp() 创建一个临时文件。它返回一个操作系统级别的 fd 以及文件的路径。我想os.fdopen() os 级别的文件描述符写入它。如果我然后关闭os.fdopen() 返回的文件,操作系统级别的文件描述符会被关闭,还是我必须明确地os.close() 它?文档似乎没有明确说明发生了什么。

【问题讨论】:

    标签: python file-io operating-system


    【解决方案1】:

    我很确定 fd 将被关闭。如果你不想这样,你可以先复制它。当然,您总是可以很容易地对此进行测试。

    测试是这样的:

    from __future__ import print_function
    
    import os
    import tempfile
    import errno
    
    fd, tmpname = tempfile.mkstemp()
    fo = os.fdopen(fd, "w")
    fo.write("something\n")
    fo.close()
    try:
        os.close(fd)
    except OSError as oserr:
        if oserr.args[0] == errno.EBADF:
                print ("Closing file has closed file descriptor.")
        else:
            print ("Some other error:", oserr)
    else:
        print ("File descriptor not closed.")
    

    这表明当文件对象关闭时,底层文件描述符也关闭了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 2011-09-18
      • 2010-09-20
      • 1970-01-01
      • 2021-04-06
      • 2010-12-04
      • 2011-04-08
      相关资源
      最近更新 更多