在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
而不是r
或r+