Python的问题解决: IOError: [Errno 32] Broken pipe

博客详细描述了在使用Python和web.py时遇到的BrokenPipe错误。问题出现在通过SSH远程执行包含nohup的启动命令时,由于SSH会话结束导致stderr的pipe被关闭,从而引发错误。作者提出了解决方案并分享了问题排查过程,对于遇到类似问题的开发者具有参考价值。
摘要由CSDN通过智能技术生成
被该问题困扰的人还是挺多的,所以又对这个问题进行了一些更深入的分析,希望可以解决读者的问题
新版本: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里面写入东西的时候, 就会报错了

希望对遇到类似问题的人有帮助, 这个问题卡了我四个小时.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值