Pour les opérations sur les fichiers, Python utilise la mise en mémoire tampon par défaut du système d'exploitation, sauf si vous le configurez autrement. Vous pouvez spécifier une taille de tampon, non tamponnée ou une ligne tamponnée.
Par exemple, la fonction open prend un argument de taille de tampon.
http://docs.python.org/library/functions.html#open
"L'argument de mise en mémoire tampon facultatif spécifie la taille de mémoire tampon souhaitée du fichier:"
- 0 signifie non tamponné,
- 1 signifie ligne mise en mémoire tampon,
- toute autre valeur positive signifie utiliser un tampon de (approximativement) cette taille.
- Une mise en mémoire tampon négative signifie utiliser la valeur par défaut du système, qui est généralement mise en mémoire tampon de ligne pour les périphériques tty et entièrement mise en mémoire tampon pour les autres fichiers.
- S'il est omis, la valeur par défaut du système est utilisée.
code:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
open('file.txt', 'w', 1)
j'obtiens un tampon de ligne approprié. Mais si je fais quelque chose de plus grand (je le voulaisopen('file.txt', 'w', 512)
), il tamponne le pleinio.DEFAULT_BUFFER_SIZE
de 8192. Est-ce un bogue Python, un bogue Linux ou un bogue ID10t?stdout
être mis en mémoire tampon, que ce soit une console ou redirigé vers un fichier?write()
un descripteur de fichier, la sortie est mise en mémoire tampon et accumulée jusqu'à ce que le tampon soit plein ... auquel moment le tampon est "vidé" (le contenu est écrit du tampon dans le fichier). Vous pouvez vider explicitement le tampon en appelant laflush()
méthode sur un descripteur de fichier.Vous pouvez également forcer le vidage du tampon dans un fichier par programme avec la
flush()
méthode.J'ai trouvé cela utile lors de la personnalisation d'un fichier de sortie avec
tail -f
.la source
Note: flush() does not necessarily write the file’s data to disk. Use flush() followed by os.fsync() to ensure this behavior.
Note: flush() does not necessarily write the file’s data to disk. Use flush() followed by os.fsync() to ensure this behavior.
flushing
signifie même. Pourquoi en avons-nous besoin? Pourquoi est-ce? pourquoi devrais-je m'en soucier?Je ne sais pas si cela s'applique également à python, mais je pense que cela dépend du système d'exploitation que vous utilisez.
Sous Linux par exemple, la sortie vers le terminal vide le tampon sur une nouvelle ligne, tandis que pour la sortie vers les fichiers, elle ne vide que lorsque le tampon est plein (par défaut). En effet, il est plus efficace de vider le tampon moins de fois et l'utilisateur est moins susceptible de remarquer si la sortie n'est pas vidée sur une nouvelle ligne dans un fichier.
Vous pourrez peut-être vider automatiquement la sortie si c'est ce dont vous avez besoin.
EDIT: Je pense que vous viderez automatiquement en python de cette façon (basé à partir d' ici )
la source
Vous pouvez également vérifier la taille de la mémoire tampon par défaut en appelant l'attribut en lecture seule DEFAULT_BUFFER_SIZE à partir du module io.
la source
Voici une autre approche, jusqu'au PO pour choisir celle qu'il préfère.
Lorsque vous incluez le code ci-dessous dans le
__init__
fichier .py avant tout autre code, les messages imprimésprint
et les erreurs ne seront plus enregistrés dans Ableton's Log.txt mais pour séparer les fichiers sur votre disque:(pour Mac, changez
#username#
le nom de votre dossier utilisateur. Sous Windows, le chemin d'accès à votre dossier utilisateur aura un format différent)Lorsque vous ouvrez les fichiers dans un éditeur de texte qui actualise son contenu lorsque le fichier sur le disque est modifié (exemple pour Mac: TextEdit ne le fait pas, mais TextWrangler le fait), vous verrez les journaux mis à jour en temps réel.
Crédits: ce code a été copié principalement à partir des scripts de surface de contrôle liveAPI par Nathan Ramella
la source