我正在尝试在 Linux 中运行应用程序并使用 Python 生成输入:
python3 -c 'print(".....")' | ./someapp
但出现下一个错误:
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
使用 bash ... 有什么建议么?
遇到的错误
BrokenPipeError: [Errno 32] Broken pipe
是因为的 Python 脚本正在尝试通过管道
|
向
someapp
程序发送数据,但
someapp
在读取完所有数据之前就关闭了管道连接。
造成这种情况的常见原因是:
-
someapp
程序预期接收到的数据量与 Python 脚本发送的数据量不匹配。 -
someapp
程序在处理数据过程中出现错误并提前退出。 -
someapp
程序可能根本就没有读取标准输入的逻辑。
以下是可以尝试解决此问题的一些方法:
1. 检查
someapp
程序:
-
确保
someapp
程序确实会从标准输入中读取数据。 -
查看
someapp
程序的文档或代码,了解其预期接收的数据格式和大小。 -
尝试使用其他命令(例如
cat
)向someapp
程序发送数据,看看是否会出现相同的错误。
2. 调试
someapp
程序:
-
使用
gdb
调试someapp
程序,看看它在什么地方关闭了管道连接。 -
在
someapp
程序中添加日志记录,以跟踪其执行过程并查看是否有任何错误发生。
3. 修改 Python 脚本:
-
确保 Python 脚本发送的数据格式和大小与
someapp
程序的预期相匹配。 -
尝试在 Python 脚本中添加错误处理机制,以捕获
BrokenPipeError
并进行处理。
示例:
如果的
someapp
程序只是简单地将接收到的数据打印到控制台,可以使用以下命令进行测试:
echo "test data" | ./someapp
如果
someapp
程序正常工作,它应该会将 "test data" 打印到控制台。如果仍然出现
BrokenPipeError
,则问题可能出在
someapp
程序本身,需要进一步进行调试。
请提供更多关于
someapp
程序的信息,以便我提供更具体的帮助。