Le problème est illustré par ce script simple:ligne-tampon de sortie standard échoue sur MINGW/MSYS Python 2.7.3
import time, os, sys
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1) # line-buffer stdout
print 'before sleep'
time.sleep(10)
print 'after sleep'
Si la ligne-tampon est réussie, alors il y aura un écart de 10 secondes entre l'impression des deux lignes. Si ce n'est pas le cas, les deux lignes apparaîtront virtuellement en même temps après une pause de 10 secondes (une fois Python démarré); c'est-à-dire que les lignes sont imprimées à la sortie du programme.
Sous Linux, je vois un comportement de ligne-buffered à la fois à un fichier et à l'écran si la ligne "sys.stdout" est incluse. Sans cette ligne, je vois le comportement de la ligne-buffered à l'écran, mais pas à un dossier. C'est prévu.
Dans l'environnement MSYS/MINGW, si j'omets la ligne "sys.stdout", je vois le même comportement que Linux: mise en mémoire tampon à l'écran mais pas à un fichier.
Ce qui est bizarre est que avec la ligne « sys.stdout », je ne vois pas la ligne-tampon pour soit l'écran ou un fichier. Je m'attends à le voir à la fois, comme dans Linux.
Quelqu'un peut-il suggérer une solution de contournement?
est ici un peu plus d'informations:
uname -a MINGW32_NT-6.0 FOO 1.0.11 (0,46/3/2) 2009-05-23 19:33 i686 Msys
Merci, -W.