673 votes

La bufferisation de la sortie de Python

Est le tampon de sortie est activé par défaut dans Python interprète sys.stdout ?

Si la réponse est positive, quelles sont toutes les manières de le désactiver ?

Des Suggestions à ce jour:

  1. Utiliser l' -u commutateur de ligne de commande
  2. Enveloppez - sys.stdout dans un objet vide après chaque écriture
  3. Ensemble PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

Est-il un autre moyen de régler certaines indicateur global en sys / sys.stdout par programme au cours de l'exécution ?

522voto

Seb Points 5120

Réponse de Magnus Lycka sur une liste de diffusion:

Vous pouvez ignorer la mise en mémoire tampon pour un processus entier python en utilisant « python -u » (ou #! / usr/bin/env python -u etc.) ou en définissant la variable d’environnement PYTHONUNBUFFERED.

Vous pouvez également remplacer sys.stdout avec quelques autre flux comme wrapper qui fait une chasse d’eau après chaque appel.

232voto

Je préfère mettre ma réponse: Comment éliminer la sortie de l'imprimé Python? ou en Python de la fonction d'impression de vide le tampon quand on l'appelle?, mais depuis qu'ils ont été marqués comme des doublons de celui-ci (ce que je ne suis pas d'accord), je vais y répondre ici.

Depuis Python 3.3 print() prend en charge l'argument mot-clé "flush" (voir la documentation):

print('Hello World!', flush=True)

91voto

Federico A. Ramponi Points 23106
<pre><code></code><p>Crédits : « Sebastian », quelque part sur la liste de diffusion de Python.</p></pre>

74voto

Brian Points 48423

Oui.

Vous pouvez le désactiver sur la ligne de commande avec le «-u » basculer.

Sinon, vous pourriez appeler .flush() sur sys.stdout sur chaque écriture (ou envelopper avec un objet qui le fait automatiquement)

15voto

Mark Seaborn Points 434
<pre><code></code><p>Sans enregistrer le vieux sys.stdout, disable_stdout_buffering() n’est pas idempotent, et plusieurs appels provoquera une erreur comme ceci :</p><pre><code></code></pre><p>Une autre possibilité est :</p><pre><code></code></pre><p>(Ajout de gc.garbage n’est pas une bonne idée parce que c’est où les cycles unfreeable se mettre, et vous pouvez consulter pour ceux.)</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X