被該問題困擾的人還是挺多的,所以又對這個問題進行了一些更深入的分析,希望可以解決讀者的問題
新版本:Python 的 Broken Pipe 錯誤問題分析
遇到一個很奇怪的問題, web.py代碼里面報錯
IOError: [Errno 32] Broken pipe
啟動命令: nohup python xxx.py > xxx.log &
ssh登錄到機器上, 啟動, 不會出現
遠程ssh執行啟動腳本, 就會出現IOError問題
查看進程pid, ll /proc/<pid>/fd 發現, stderr也就是fd為2的文件, 竟然是個pipe, 是個broken pipe, 錯誤的地方找到了
猜測可能是ssh登錄過去, nohup會redirect stderr, 默認重定向到stdout, 不過ssh會話的stdout應該是pipe, 因為需要把輸出從遠端機器回傳到本機
nohup把stderr重定向到了這個pipe上, 當ssh會話結束時, pipe自然會被關閉, 這樣當程序代碼中往stderr里面寫入東西的時候, 就會報錯了
希望對遇到類似問題的人有幫助, 這個問題卡了我四個小時.