[Note] [Mémo d'une ligne] Si vous ajoutez l'option -u à Python, stdout et stderr deviennent sans tampon. Pratique lorsqu'il est raccordé au tee

Le titre est tout au sujet du contenu, mais pour le moment

python -c 'import time; print(1); time.sleep(1); print(2)

⇒ 1 s'affiche et après un certain temps, 2 s'affiche.

sh -c 'echo 1; sleep 1; echo 2'

⇒ 1 s'affiche et après un certain temps, 2 s'affiche.

python -c 'import time; print(1); time.sleep(1); print(2) | tee /dev/null

⇒ Après un certain temps, 1 et 2 s'affichent en même temps

sh -c 'echo 1; sleep 1; echo 2' | tee /dev/null

⇒ 1 s'affiche et après un certain temps, 2 s'affiche.

Pourquoi se comporte-t-il différemment uniquement lorsqu'il est diffusé en Python?

Python est intelligent, donc si stdout et stderr sont des terminaux, ils tamponneront la ligne, sinon ils tamponneront normalement. (Lors de la sortie de beaucoup, la mise en mémoire tampon est extrêmement plus rapide) Au fait, Python le fait lui-même, vous ne pouvez donc pas changer le comportement avec la commande stdbuf.

Avec l'option -u, il devient sans tampon.

python -u -c 'import time; print(1); time.sleep(1); print(2) | tee

⇒ 1 s'affiche et après un certain temps, 2 s'affiche.

Recommended Posts

[Note] [Mémo d'une ligne] Si vous ajoutez l'option -u à Python, stdout et stderr deviennent sans tampon. Pratique lorsqu'il est raccordé au tee
Un mémo de fonction utile lorsque vous souhaitez entrer dans le débogueur si une erreur se produit lorsque vous exécutez un script Python.
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
Remarque Python: lorsque vous souhaitez connaître les attributs d'un objet
Que faire si vous obtenez l'erreur RuntimeError: Python n'est pas installé en tant que framework lorsque vous essayez d'utiliser matplitlib et pylab dans Python 3.3
Une note utile lors de l'utilisation de Python après une longue période
Que faire si vous obtenez l'erreur "Erreur: opencv3: Ne prend pas en charge la construction des wrappers Python 2 et 3" lors de l'installation d'openCV 3
Option pour désactiver le tampon stdout / stderr en Python
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Une note de malentendu lors de la tentative de chargement de l'intégralité du module self-made avec Python3