A causa raiz é o seu processo, aqui python
, está usando libc
stdout
em que a saída é armazenada em buffer quando é enviada para um terminal mas bloqueada em buffer quando é enviada para algo diferente, como um pipe aqui. p>
Você pode corrigir o problema no código python, limpando explicitamente o buffer após cada saída de log:
sys.stdout.flush()
ou controlando como o buffering será feito com algum hack:
stdbuf -oL python foo.py | ~/timestamp.sh >> ~/logs/foo.log
ou
unbuffer python foo.py | ~/timestamp.sh >> ~/logs/foo.log
Eu recomendaria explicitamente liberar o buffer em seu código ( sys.stdout.flush()
), já que você é o único a saber exatamente onde a saída deve ser liberada. O buffer de linha ( stdbuf -oL
) é um pouco menos otimizado, mas deve ser ok, já que você marca o timestamp por linha, e desabilitar todo o buffering ( unbuffer
ou python -u
sugestão de heemayl) é a pior abordagem em termos de desempenho ( embora possa ser imperceptível dependendo de como o seu código python está escrevendo sua saída).