Python的問題解決: IOError: [Errno 32] Broken pipe


被該問題困擾的人還是挺多的,所以又對這個問題進行了一些更深入的分析,希望可以解決讀者的問題
新版本: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里面寫入東西的時候, 就會報錯了

希望對遇到類似問題的人有幫助, 這個問題卡了我四個小時.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM