У меня есть программа Python, доступ к которой осуществляется через socat, поэтому стандартный ввод и стандартный вывод предоставляются и отображаются на клиенте. Я использую:
Код: Выделить всё
socat TCP4-LISTEN:12345,reuseaddr,fork EXEC:"python prompt.py"
Это работает так, как ожидалось. Prompt.py отображает некоторую информацию о stderr, которая отображается на стороне сервера. Вместо этого я бы хотел, чтобы stderr отправлялся в процесс регистрации на третьем сервере (а не на клиенте, который подключается к указанному выше socat). Я могу выполнить часть stderr, как и ожидалось (без socat), используя:
В этом случае я могу прочитать/ответить на приглашение на терминале, выполняющем эту команду, и stderr перейдет к работающему регистратору:
Код: Выделить всё
socat TCP4-LISTEN:2323,reuseaddr,fork EXEC:"tee -a errors.txt"
и файл error.txt заполняется, как и ожидалось. Но когда я пытаюсь объединить их с:
Код: Выделить всё
socat TCP4-LISTEN:12345,reuseaddr,fork EXEC:"python prompt.py 2> >(nc -q 0 logger 2323)",pty
stderr Python Prompt.py не отправляется должным образом; вместо этого он по-прежнему отображается на сервере. Я тоже пробовал:
Код: Выделить всё
socat TCP4-LISTEN:12345,reuseaddr,fork EXEC:"bash -c 'python prompt.py 2> >(nc -q 0 logger 2323)'"
При этом при подключении к socat ничего не происходит. Почему EXEC моей команды bash или команды python не запускает перенаправление stderr? Есть ли способ сделать это?
Вместо этого я попробовал перенаправить stderr команды socat; однако это открывает и сохраняет открытым соединение nc, которое мне не нужно. Я хотел, чтобы соединение nc открывалось, а затем закрывалось каждый раз при запуске программы Python.
Подробнее здесь:
https://stackoverflow.com/questions/784 ... te-process