Je me demandais combien de fois python vide dans un fichier. Aussi je me demandais combien de fois python vide vers stdout. Je crois que python vide dans stdout après chaque nouvelle ligne, mais cela étant dit, si vous surchargez stdout pour être dans un fichier il vide aussi souvent que stdout ou combien de fois il vide dans un fichier ?
Réponses
Trop de publicités?Pour les opérations de fichiers, Python utilise le système d'exploitation par défaut du tampon, à moins que vous le configurez faire autrement. Vous pouvez spécifier une taille de mémoire tampon, mémoire sans tampon, ou de la ligne de mise en mémoire tampon.
Par exemple, la fonction d'ouverture prend une taille de mémoire tampon de l'argument.
http://docs.python.org/library/functions.html#open
"L'option de mise en mémoire tampon argument spécifie le fichier désiré par la taille de la mémoire tampon: 0 signifie sans tampon, 1 ligne de tampon, toute autre valeur positive signifie que l'utilisation d'un tampon de (environ) de cette taille. Un négatif de mise en mémoire tampon des moyens pour utiliser la valeur par défaut du système, qui est généralement de ligne mis en mémoire tampon pour les ats et pleinement mis en mémoire tampon pour les autres fichiers. Si omis, la valeur par défaut du système est utilisé."
bufsize = 0
f = open('file.txt', 'w', bufsize)
Je ne sais pas si cela s'applique à python, mais je pense que ça dépend du système d'exploitation que vous exécutez.
Sur Linux par exemple, la sortie à la borne vide le tampon sur un retour à la ligne, alors que pour la sortie de fichiers uniquement bouffées de chaleur quand le tampon est plein (par défaut). C'est parce qu'il est plus efficace de vider la mémoire tampon de moins en moins de temps, et l'utilisateur est moins susceptible d'avis si la sortie n'est pas vidé sur un saut de ligne dans un fichier.
Vous pourriez être en mesure de vider automatiquement la sortie, si c'est ce dont vous avez besoin.
EDIT: je pense que vous serez d'auto-flush en python de cette façon (en fonction à partir d' ici)
#0 means there is no buffer, so all output
#will be auto-flushed
fsock = open('out.log', 'w', 0)
sys.stdout = fsock
#do whatever
fsock.close()