Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python程序退出时出错:“0”;文件对象析构函数“中的关闭失败”&引用;sys.EXPEPTHOOK缺失“1;_Python_Linux_Sys - Fatal编程技术网

Python程序退出时出错:“0”;文件对象析构函数“中的关闭失败”&引用;sys.EXPEPTHOOK缺失“1;

Python程序退出时出错:“0”;文件对象析构函数“中的关闭失败”&引用;sys.EXPEPTHOOK缺失“1;,python,linux,sys,Python,Linux,Sys,在python代码的最后一行(print语句)之后,出现以下错误: close failed in file object destructor: sys.excepthook is missing lost sys.stderr 有人知道这可能是从哪里来的吗 更新:我的python代码非常长,但我将发布可能与此错误有关的部分: 首先,在进程开始时,我将stdout和stderr重定向到如下日志文件: so = se = open(logfile, 'w', 0)

在python代码的最后一行(print语句)之后,出现以下错误:

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
有人知道这可能是从哪里来的吗

更新:我的python代码非常长,但我将发布可能与此错误有关的部分:

首先,在进程开始时,我将stdout和stderr重定向到如下日志文件:

so = se = open(logfile, 'w', 0)                       
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 
os.dup2(so.fileno(), sys.stdout.fileno())           
os.dup2(se.fileno(), sys.stderr.fileno())

虽然我一直都在这样做,但从未遇到过这种错误,但这似乎是我看到这种情况的最可能原因。

在我的主要函数的末尾添加以下语句可以为我解决这个问题:

try:
    sys.stdout.close()
except:
    pass
try:
    sys.stderr.close()
except:
    pass

冲水和关门对我来说很有效

sys.stdout.flush()
sys.stdout.close()

sys.stderr.flush()
sys.stderr.close()

调用程序时,您如何处理错误(
stderr
)流?您是否导入了自己编写的名为
sys
的模块?我认为错误可能来自您的代码,但由于您没有向我们展示任何错误,世界可能永远不会知道。@jwodder hah,代码非常长,我不知道哪些部分与此错误相关,所以我没有发布任何东西来验证您发布的部分是否足以重现问题。有关创建最小、完整、可验证示例的规则,请参见。是的,这意味着在提问之前你需要自己做一些工作。user20408的答案对我很有用。这个答案同样有效,并显示了一条新的错误消息:
sys.stdout.flush()IOError:[Errno 32]管道破裂