73

我正在使用一个科学软件,包括一个正在调用的 Python 脚本,该脚本os.system()用于运行另一个科学程序。当子进程运行时,Python 在某些时候会打印以下内容:

close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

我相信这条消息是在返回的同时打印的os.system()

我现在的问题是:

哪些情况会导致这种类型的 IOError?它到底是什么意思?对被调用的子进程意味着什么os.system()

4

2 回答 2

62

如果 Python 文件是从“外部”关闭的,即不是从文件对象的close()方法关闭,您会收到此错误消息:

>>> f = open(".bashrc")
>>> os.close(f.fileno())
>>> del f
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

该行del f删除了对文件对象的最后一个引用,导致其析构函数file.__del__被调用。文件对象的内部状态表明文件仍然打开,因为f.close()从未调用过,因此析构函数尝试关闭文件。由于尝试关闭未打开的文件,操作系统随后引发错误。

由于 的实现os.system()不会创建任何 Python 文件对象,因此调用似乎不太可能system()是错误的根源。也许你可以显示更多的代码?

于 2011-10-07T11:13:40.287 回答
19

如果您在打开文件时使用了错误的模式,您可能会收到此错误。例如:

    with open(output, 'wb') as output_file:
        print output_file.read()

在该代码中,我想读取文件,但我使用 modewb而不是rorr+

于 2015-11-30T18:38:45.547 回答