Normalmente puts
non scrive immediatamente su STDOUT
, ma memorizza le stringhe internamente e scrive l'output in blocchi più grandi. Questo perché le operazioni di I/O sono lente e in genere ha più senso evitare di scrivere immediatamente ogni singolo carattere sulla console.
Questo comportamento causa problemi in determinate situazioni. Immagina di voler costruire una barra di avanzamento (esegui un ciclo che emette punti singoli tra calcoli estesi). Con il buffering, il risultato potrebbe essere che non c'è alcun output per un po 'e poi improvvisamente vengono stampati più punti contemporaneamente.
Per evitare questo comportamento e invece scrivere immediatamente a STDOUT
è possibile impostare STDOUT
in modalità di sincronizzazione in questo modo:
STDOUT.sync = true
Dal docs:
Quando la modalità di sincronizzazione è vero, tutti gli output è immediatamente scaricato dal sistema operativo sottostante e non viene memorizzato nel buffer internamente.
l'esempio con punti mi ha ricordato le barre di avanzamento. – SuperManEver