Ver saída de script sobre ssh em tempo real

3

Estou tentando executar um script local em uma máquina remota com ssh.

Digamos que este seja o script python ( printdelay.py ) que estou tentando executar:

from time import sleep  
print("The first line")  
sleep(10)  
print("The second line")

Eu executo o script assim:

cat printdelay.py | ssh user@host python

O script é executado, mas notei que só vejo a saída do comando quando o script inteiro termina de ser executado. Eu gostaria de ver a saída conforme o script é executado, ou seja, com um atraso entre a impressão das duas linhas.

Eu notei que

cat printdelay.py | ssh -t -t user@host python

meio que faz o que eu estou procurando, mas depois eu vejo muito barulho no pseudo-terminal, ao invés da impressão simples das linhas. Eu acho que há uma maneira melhor de fazer isso.

    
por SauceCode 22.11.2016 / 19:33

1 resposta

5

Use o sinalizador -u para python:

cat printdelay.py | ssh user@host python -u

O comportamento que você está vendo é porque ao gravar para stdout quando o stdout não é um dispositivo interativo, como um tty ou pty, a família de funções printf libera o buffer com menos frequência . Não há muito o que fazer sobre isso, exceto dar um Python, como você descobriu. Isso vai funcionar:

scp printdelay.py user@host:/tmp/timedelay.py
ssh -t user@host python /tmp/timedelay.py

(Se você apenas cat timedelay.py | ssh -tt user@host python , o python terá um arquivo e ele irá liberar o buffer com mais freqüência, mas você terá outros problemas, por exemplo, seu script será impresso no stdout devido à maneira como a alocação de pty funciona ssh.)

Você também pode tentar usando o comando coreutils stdbuf .

    
por 22.11.2016 / 20:06