在os.system()期间会导致“IOError:错误的文件描述符”?

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

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

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

我现在的问题是:

哪些情况会导致这种types的IOError? 这究竟意味着什么? 这对os.system()调用的subprocess意味着什么?

如果从“外部”(即不是从文件对象的close()方法close()closures了Python文件,则会出现此错误消息:

 >>> 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()从来没有被调用,所以析构函数试图closures文件。 操作系统随后会因尝试closures未打开的文件而引发错误。

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

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

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

在那个代码中,我想读取文件,但是我使用模式wb而不是rr+