在os.system()期间会导致“IOError:[Errno 9]错误文件描述符”的原因是什么?

时间:2011-10-07 10:54:28

标签: python subprocess posix file-descriptor ioerror

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

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

我相信此邮件会在os.system()返回的同时打印。

我现在的问题是:

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

2 个答案:

答案 0 :(得分:40)

如果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()调用似乎不太可能是错误的起源。也许你可以展示更多的代码?

答案 1 :(得分:14)

如果在打开文件时使用了错误的模式,则会出现此错误。例如:

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

在该代码中,我想阅读该文件,但我使用模式wb代替rr+