socat disable double echo

2

Se eu executar uma sessão normal em Python interativo, a entrada / saída será assim:

>>> 1 + 1;
2

Agora estou tentando executar o socat , então inicio um "servidor"

socat UNIX-LISTEN:$HOME/socket,fork EXEC:python,pty,stderr

E conecte-se a ele de outro terminal:

socat - UNIX-CONNECT:$HOME/socket

O que funciona quase bem, exceto que a entrada também é repetida novamente:

>>> 1 + 1;
1 + 1;
2

Como posso desligar isso? echo=0 não faz o que eu quero: isso esconde a entrada enquanto eu estou digitando também, o que não é muito útil. Eu quero que funcione como uma sessão interativa normal.

(usar python e um soquete de domínio local é apenas um exemplo; o mesmo ocorre com outros programas (por exemplo, cat, lua etc.) e outros tipos de soquete, por exemplo, um soquete TCP.

    
por Bristol 31.10.2014 / 18:06

1 resposta

5

escreva isso no lado do cliente. observe o "raw" .

socat unix-connect:socket -,raw,echo=0

ou isso no lado do servidor . observe o "echo = 0"

socat unix-listen:socket exec:"python",pty,echo=0

mas não ambos. alternativamente bruto no stdio do cliente com echo = 0 no servidor pty é bom, mas echo = 0 não deve ser aplicado duas vezes.

vamos olhar os dois 1 + 1s. são ecos, mas com significados diferentes. o primeiro eco é do buffer de linha do terminal do cliente, e o segundo é do terminal no lado do servidor criado pelo socat.

>>> 1 + 1;
1 + 1;
2

uso de echo = 0 sozinho no cliente stdio, socat informa seu terminal de controle (ou seja, xterm ou qualquer coisa assim) para desabilitar o eco (exibição na tela) do buffer stdio, assim o primeiro 1 + 1 desaparece, e o o segundo mostrará no mesmo lugar quando a tecla de retorno for pressionada. echo = 0 na pty do servidor impede que a socat ecoe (ping-pong) a entrada que recebe de volta ao cliente, assim o segundo 1 + 1 desaparece. com raw no cliente, o buffer do stdio é desabilitado para que cada chave não espere até que um retorno seja enviado para o servidor, e o servidor ecoa a chave de volta imediatamente . use raw no stdio do cliente juntamente com echo = 0 no stdio do cliente quando uma tecla é pressionada é enviada primeiro para o servidor, em seguida, o servidor a envia de volta e é exibido no cliente. use raw no stdio do cliente junto com echo = 0 no servidor pty quando uma tecla é pressionada é exibida simultaneamente como é enviada para o servidor, mas nunca é enviada de volta.

para edição de linha de comando, às vezes é suficiente para armazenar em buffer uma linha no lado do cliente e não enviar uma linha inteira até terminarmos de editar essa linha. no entanto, se uma conclusão inteligente e poderosa for desejada, o envolvimento do lado do servidor será necessário.

    
por 23.01.2015 / 15:45

Tags