当前位置: 首页 > 面试题库 >

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

赵元白
2023-03-14
问题内容

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

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

我相信此消息与os.system()退货同时打印。

我的问题是:

哪些情况会导致此类IOError?这到底是什么意思?这对已被调用的子流程意味着什么os.system()


问题答案:

如果从“外部”(即不是从文件对象的close()方法)关闭了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()从未被调用而仍处于打开状态,因此析构函数将尝试关闭该文件。操作系统随后由于试图关闭未打开的文件而引发错误。

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



 类似资料:
  • 问题内容: 尝试附加到go例程中的日志文件时,我得到了错误的文件描述符。 该文件存在,并且具有666的权限。起初我想很好,也许是因为他们每个人都试图同时打开文件。我实现了一个互斥体来尝试避免这种情况,但是遇到了同样的问题,因此我将其删除。 问题答案: 您需要添加标志: 为了说明,这是Linux文档:http : //man7.org/linux/man- pages/man2/openat.2.h

  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 问题内容: 如何防止跨fork()系统调用复制文件描述符(当然,不关闭文件描述符)? 我正在寻找一种方式来纪念 一个文件描述符 作为 不被继承(复印通) (如果你喜欢这么FD_DONTINHERIT功能)通过孩子fork()的,有点像FD_CLOEXEC般的技巧,但对于叉。有人这样做吗?或对此进行了调查,对我有一个提示? 谢谢 更新: 我可以使用libc的__register_atfork 在fo

  • 问题内容: 好吧,我试图理解并阅读可能导致它的原因,但我却无法理解: 我的代码中有这个地方: 事实是,当它尝试调用某些方法时,它将引发而不是其他预期的异常(特别是)抛出 。我实际上知道调用了什么方法,所以我直接转到该方法代码,并为应该抛出的行添加了一个块 ,它实际上按预期抛出。然而,当它上升时,以某种方式更改了上面的代码并没有 按预期进行。 是什么原因导致这种行为的?我该如何检查? 问题答案: 通

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...

  • 在最新版本的JavaSpecialists时事通讯中,作者提到了一段在Java中不可编译的代码 尝试编译它,你会得到一个错误,比如: 为什么一段等价的C#代码没有显示出这样的问题?