What can lead to "IOError: [Errno 9] Bad file descriptor" during os.system()?

我正在使用一个科学软件,其中包括一个 Python 脚本,该脚本调用 os.system()来运行另一个科学程序。当子进程运行时,Python 会在某个时刻输出以下内容:

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

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

我现在的问题是:

哪些条件会导致此类 IOError?这到底是什么意思?对于 os.system()调用的子流程来说,这意味着什么?

214603 次浏览

如果 Python 文件是从“外部”关闭的,也就是说不是从 file 对象的 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 对象的最后一个引用,从而调用其析构函数 file.__del__。File 对象的内部状态指示文件仍处于打开状态,因为从未调用 f.close(),所以析构函数尝试关闭文件。操作系统随后抛出一个错误,因为试图关闭未打开的文件。

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

You can get this error if you use wrong mode when opening the file. For example:

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

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

如果你的工作目录启用了勒索软件保护,你可能会得到这个错误。Windows 不允许任何第三方应用程序对文件进行更改,如果该目录受到 Windows 附带的勒索软件保护。你可以通过“ Windows 安全-> 病毒和威胁保护-> 管理勒索软件保护-> 允许应用程序通过受控的文件夹访问”来纠正这个问题

然后单击 Add an allow app 添加“ Python [ version ] . exe”。