私はSIGPIPEについて学び、Pythonでこれらを処理する方法を読んでいます。他の情報源の中でPython - 壊れたパイプをキャッチする方法
、私が読んでいる:How to handle a broken pipe (SIGPIPE) in python?
はのは、パイプの読み取りスクリプトが終了としましょう、そしてすべての答えは、書き込みスクリプトは、try節での書き込みコールをwrappesことを示唆しています。
しかし、私はこの作業を行うことはできません。これは私のコードです:
# 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