Eu não acho que tenha algo a ver com nohup
. Você obtém o mesmo comportamento quando executa python a.py > a.log 2>&1
.
O Python provavelmente está usando o arquivo C stdio abaixo. Com isso, stdout
, quando em um terminal, será armazenado em buffer de linha e armazenado em buffer quando stdout
for um arquivo. stderr
está sempre sem buffer.
Redirecionar stdout
para um arquivo alternará o armazenamento em buffer de stdout
do buffer de linha para o buffer e fará com que a sequência print
ed fique presa no buffer, que só é liberada quando o programa (o fluxo) fecha. O fluxo stderr
chega ao arquivo mais rápido porque não está bufferizado.
Você pode usar stdbuf
para ajustar o buffer padrão, forçando as linhas a serem impressas na ordem correta:
stdbuf -o0 python a.py >a.log 2>&1