繁体   English   中英

IOError: [Errno 32] 管道损坏

[英]IOError: [Errno 32] Broken pipe

我通常在使用 python 中的 paramiko ssh 模块运行我的自动化脚本时观察到这一点。 执行某些命令时,它失败并显示以下错误。 在 tcl 脚本中也观察到此错误,因此意识到它不是特定于语言的

IOError: [Errno 32] Broken pipe

我们在将输出流写入文件时观察到了它,如下所示

file_handle.write(line_data)

我们可以处理异常并添加重试块(Ref: IOError: [Errno 32] Broken pipe: Python

但我很想知道为什么会发生这种情况,以便我可以在开展工作之前采取必要的预防措施。

我的发现导致“网络掉线”或“接收系统无响应”。 但我对这些观点并不十分信服。 请让我知道根本原因

断管只是意味着管道套接字的接收端已经关闭了连接。 例如,考虑这个:

% python3 -c 'print("hello\n" * 2' | python3 -c 'import os; os.write(1, os.read(0, 6))'
hello

没有错误发生,因为管道有一个缓冲区来保存多余的数据。

现在 Linux 中的缓冲区默认为 64Ki,所以

% python3 -c 'print("h" * 65535)' | python3 -c 'import os; os.write(1, os.read(0, 5))'
hhhhh

% python3 -c 'print("h" * 65536)' | python3 -c 'import os; os.write(1, os.read(0, 5))'
hhhhhhException ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe

这里写入了 65536 个字符换行符; 并且管道错误仅在 Python 程序结束时刷新流时发生。


为避免该错误,读取输入的任何脚本必须始终消耗所有可用输入,直到出现文件结尾,或者生成数据的脚本必须足够小心,以免产生超出预期的输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM