Python: unix socket -> 断管

2 投票
2 回答
4457 浏览
提问于 2025-04-15 22:03

我正在尝试用Python的socket功能来替代命令行中的socat工具。

这个socat命令运行得很好:

echo 'cmd' | sudo socat stdio <path-to-socket>

但是当我运行这段Python代码时,我遇到了一个错误:

>>> import socket
>>> s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
>>> s.connect(<path-to-socket>)
>>> s.send('cmd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.error: (32, 'Broken pipe')

有没有人知道问题出在哪里?谢谢。

2 个回答

1

我之前遇到一个问题,我的代码在脚本中运行得很好,但在交互式环境下却出现了“断管”的错误。我想可能是因为有个超时之类的原因。

4

你在 echo | socat 这一行和你的 Python 代码之间,有一个明显的区别,那就是 echo 会添加一个换行符,而你在 Python 代码中没有发送这个换行符。我不认为这个换行符会导致“管道破裂”的错误。你的基本思路看起来没问题,我在本地测试时也能正常工作。你确定服务器进程没有做什么额外的事情吗?你确定它还在监听,没有因为某种原因关闭了套接字的另一端吗?

撰写回答