Python: [Errno 32] Broken pipe異常分析
阿新 • • 發佈:2019-01-31
問題描述
一個比較簡單的應用場景,在子程序中處理一些基本的業務邏輯,無socket相關的通訊。def subprocess():
......
def mainprocess():
pid = os.fork()
if pid == 0:
subprocess()
近期該業務模組不能正常工作,並報告[Errno 32] Broken pipe異常。
執行環境:Python 2.6, Ubuntu 9.04
問題分析
[Errno 32] Broken pipe異常屬於IOError,因此此問題和IO操作有關。檢查相關的業務邏輯:1. 之前的處理,相關的日誌均通過log模組記錄到檔案中,無此異常 2. 檢查相關的原始碼的修改記錄,發現近期有開發人員沒有使用log模組記錄日誌,而採用了print直接操作,初步推測可能和這部分程式碼有關 根據上述分析,通過Eclipse+Pydev的環境進行除錯,居然可以正常執行;但shell下啟動響應的指令碼卻依然有異常。print語句將輸出資訊定向到標準輸出上,是否是輸出滿了導致的。進一步檢視shell的啟動程式碼,使用類似"nohup test.py"的形式啟動,沒有進行重定向輸出重定向。