Dupliquer possible:
Mise en mémoire tampon de sortie PythonExiste-t-il un moyen d'obtenir l'effet de l'exécution de python -u à partir de mon code? À défaut, mon programme peut-il vérifier s’il fonctionne en mode -u et quitter avec un message d’erreur sinon? C'est sur linux (serveur Ubuntu 8.10)
- La bufferisation de la sortie de Python (5 réponses )
Réponses
Trop de publicités?Le mieux que je pouvais venir avec:
>>> import os
>>> import sys
>>> unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> unbuffered.write('test')
test>>>
>>> sys.stdout = unbuffered
>>> print 'test'
test
Testé sous GNU/Linux. Il semble qu'il devrait fonctionner sur Windows. Si je savais comment faire pour rouvrir sys.stdout, il serait beaucoup plus facile:
sys.stdout = open('???', 'w', 0)
Références:
http://docs.python.org/library/stdtypes.html#file-objects
http://docs.python.org/library/functions.html#open
http://docs.python.org/library/os.html#file-object-creation
[Modifier]
Notons qu'il serait probablement mieux de fermer sys.stdout avant de l'écraser.
Vous pouvez utiliser le fait que stderr n'est jamais mis en mémoire tampon et essayer de rediriger stdout vers stderr:
import sys
#buffered output is here
doStuff()
oldStdout = sys.stdout
sys.stdout = sys.stderr
#unbuffered output from here on
doMoreStuff()
sys.stdout = oldStdout
#the output is buffered again
doEvenMoreStuff()