4
我刚刚了解了SIGPIPE,然后阅读了如何在Python中处理这些信息。Python - 如何捕捉破损的管道
在其他来源,我已阅读:How to handle a broken pipe (SIGPIPE) in python?
假设管道读脚本退出,那么所有的答案提示,写脚本wrappes在try子句其写调用。
但是,我无法完成这项工作。这是我的代码:
# printer.py
import time
try:
for i in range(10):
time.sleep(1)
print i
except:
print 'We caught the problem'
和
#nonreader.py
#read nothing, but stay alive for 5 sec
import time, sys
time.sleep(5)
sys.exit(0)
而且在外壳:
$ python printer.py | python nonreader.py
close failed in file object destructor:
Error in sys.excepthook:
Original exception was:
显然,没有被抓住了。此外,它看起来确实是错误的,当它打印'原始异常是:',然后没有更多。
什么是错误的/我误解了什么?
托马斯
这很有道理,谢谢:)但我不喜欢这个概念,一个异常可以排序“发生在代码之后“。这样我就无法捕捉到这个异常。比方说,我不知道刷新事件,我只是想在这个脚本中发现任何问题,并将它写入日志。 –
该问题实际上与无法明确关闭该文件有关。如果关闭该文件(而不是仅仅退出并让系统关闭它),那么您将在该点发现错误。 –
感谢您的回答,在我的问题中,我所要做的只是刷新管道的写入端,然后关闭工作正常。 – ihatecache