Eu tenho um servidor HTTP mínimo escrito em python ( http://pastebin.com/mjLDk7Gk ) que simplesmente responde a todas as solicitações GET com status 200 e corpo "Done".
Se eu fizer
wget "http://localhost:9001" -O - -q
Done
Mas se eu deixar de fora o -q:
wget "http://localhost:9001" -O -
--2015-01-12 15:28:20-- http://localhost:9001/
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:9001... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified
Saving to: ‘STDOUT’
[<=> ] 0 --.-K/s D
[ <=> ] 4 --.-K/s in 0s
2015-01-12 15:28:20 (670 KB/s) - written to stdout [4]
#blank line here
No final da primeira linha de "status bar" existe um "D", é de fato o primeiro caractere da saída desejada. Eu suponho que a saída está em algum lugar perdido ao atualizar o terminal. Isso também acontece com corpos de resposta mais longos.
Outra observação: Se eu redirecionar a saída para um arquivo, ele funcionará novamente:
wget "http://localhost:9001" -O - > /tmp/file
cat /tmp/file
Done
Também acontece com terminais muito largos. A "barra de status" está crescendo, mas ainda há apenas um caractere do corpo da resposta.
Isso é um bug ou uma falha de configuração em algum lugar do meu lado? Eu tenho um comportamento idêntico ao gnome-terminal e xterm (no Ubuntu 14.04.1 LTS).
fonte
Respostas:
Por um lado, com
-O -
, você está solicitandowget
para gravar os dados recebidosstdout
, o que faz sem buffering . Por outro lado, e a menos que você o suprima-q
,wget
escreve informações de progresso emstderr
.Se você não redirecionar um dos fluxos (usando
> some_file
), ambos serão exibidos simultaneamente pelo terminal, e eles não se misturam bem, especialmente porquewget
usa caracteres especiais para exibir a barra de status.O que você espera é
wget
:Você pode fazer isso com um arquivo temporário:
Você provavelmente também pode usar o buffer :
fonte
stdout
na sua primeira frase? Além disso, tudo isso faz sentido.