Isso está acontecendo porque normalmente quando o processo STDOUT é redirecionado para algo diferente de um terminal, a saída é armazenada em buffer em algum buffer de tamanho específico do SO (talvez 4k ou 8k em muitos casos). Por outro lado, ao enviar para um terminal, o STDOUT será armazenado em buffer de linha ou não será armazenado em buffer, portanto, você verá a saída após cada \n
ou para cada caractere.
Você geralmente pode alterar o armazenamento em buffer do STDOUT com o utilitário stdbuf
:
stdbuf -oL python script.py > log
Agora, se você tail -F log
, deverá ver cada saída de linha imediatamente à medida que ela é gerada.
Alternativamente, o fluxo explícito do fluxo de saída após cada impressão deve alcançar o mesmo. Parece que o sys.stdout.flush()
deve conseguir isso em Python. Se você estiver usando o Python 3.3 ou mais recente, a função print
também terá uma palavra-chave flush
que faz isso: print('hello', flush=True)
.