在 os.system() 期间什么会导致"IOError: [Errno 9] Bad file descriptor"?



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

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

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

我现在的问题是:

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

如果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__被调用。file对象的内部状态表明,由于f.close()从未被调用,因此该文件仍处于打开状态,因此析构函数尝试关闭该文件。操作系统随后抛出错误,因为试图关闭未打开的文件。

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

如果您在打开文件时使用错误的模式,则会得到此错误。例如:

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

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

如果您在工作目录上启用了勒索软件保护,则可能会出现此错误。如果目录受到Windows自带的勒索软件保护,Windows不允许任何第三方应用程序对文件进行更改。您可以通过进入"Windows安全"->病毒和威胁防护->管理勒索软件防护->允许应用程序通过受控文件夹访问"

然后添加"Python[version].exe"

相关内容

  • 没有找到相关文章

最新更新