Python: сокет unix -> сломанная труба - PullRequest
2 голосов
/ 27 апреля 2010

Я пытаюсь заставить работать сокет Python в качестве альтернативы вызову командной строки 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 ]

4 голосов
/ 27 апреля 2010

Существует одно очевидное различие между вашей echo | socat строкой и вашим кодом Python, и это новая строка, которую echo добавляет, но вы не отправляете свой код Python. Я не понимаю, как это может привести к ошибке сломанной трубы. Ваш основной подход, кажется, хорошо, и он отлично работает, когда я тестирую локально. Вы уверены, что процесс сервера не делает здесь ничего лишнего? Вы уверены, что он все еще слушает и, например, по какой-то причине не закрыл другой конец сокета?

0 голосов
/ 14 мая 2014

У меня была эта проблема, и в итоге мой код работал нормально в скрипте, но при работе в интерактивном режиме был сломан канал. Я думаю, что есть тайм-аут или что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...