Für Dateivorgänge verwendet Python die Standardpufferung des Betriebssystems, sofern Sie dies nicht anders konfigurieren. Sie können eine Puffergröße, ungepuffert oder zeilengepuffert angeben.
Die Funktion open verwendet beispielsweise ein Argument für die Puffergröße.
http://docs.python.org/library/functions.html#open
"Das optionale Pufferargument gibt die gewünschte Puffergröße der Datei an:"
- 0 bedeutet ungepuffert,
- 1 bedeutet leitungsgepuffert,
- Jeder andere positive Wert bedeutet, dass ein Puffer von (ungefähr) dieser Größe verwendet wird.
- Eine negative Pufferung bedeutet, den Systemstandard zu verwenden, der normalerweise für tty-Geräte zeilengepuffert und für andere Dateien vollständig gepuffert ist.
- Wenn nicht angegeben, wird die Systemvorgabe verwendet.
Code:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
open('file.txt', 'w', 1)
bekomme ich die richtige Zeilenpufferung. Aber wenn ich etwas Größeres mache (ich wollteopen('file.txt', 'w', 512)
), puffert esio.DEFAULT_BUFFER_SIZE
8192. Ist das ein Python-Fehler, ein Linux-Fehler oder ein ID10t-Fehler?stdout
zeilengepuffert werden, unabhängig davon, ob es sich um eine Konsole handelt oder ob sie in eine Datei umgeleitet wird.write()
ein Dateihandle aufrufen , wird die Ausgabe im Speicher gepuffert und akkumuliert, bis der Puffer voll ist. Zu diesem Zeitpunkt wird der Puffer "geleert" (Inhalt wird aus dem Puffer in die Datei geschrieben). Sie können den Puffer explizit leeren, indem Sie dieflush()
Methode für ein Dateihandle aufrufen .Sie können den Puffer auch programmgesteuert mit der
flush()
Methode in eine Datei leeren .Ich habe dies nützlich gefunden, wenn ich eine Ausgabedatei mit abschließe
tail -f
.quelle
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
überhaupt bedeutet. Warum brauchen wir es? Wofür ist das? warum sollte es mich interessieren?Ich weiß nicht, ob dies auch für Python gilt, aber ich denke, es hängt vom Betriebssystem ab, das Sie ausführen.
Unter Linux beispielsweise wird bei der Ausgabe an das Terminal der Puffer in einer neuen Zeile geleert, während bei der Ausgabe an Dateien nur geleert wird, wenn der Puffer voll ist (standardmäßig). Dies liegt daran, dass es effizienter ist, den Puffer weniger oft zu leeren, und der Benutzer es weniger wahrscheinlich bemerkt, wenn die Ausgabe nicht in einer neuen Zeile in einer Datei geleert wird.
Möglicherweise können Sie die Ausgabe automatisch spülen, wenn Sie dies benötigen.
EDIT: Ich denke, Sie würden in Python auf diese Weise automatisch spülen (basierend von hier )
quelle
Sie können die Standardpuffergröße auch überprüfen, indem Sie das schreibgeschützte Attribut DEFAULT_BUFFER_SIZE aus dem io-Modul aufrufen.
quelle
Hier ist ein anderer Ansatz, bis das OP entscheidet, welchen er bevorzugt.
Wenn Sie den folgenden Code
__init__
vor jedem anderen Code in die PY-Datei aufnehmen, werden mitprint
und gedruckte Nachrichten und Fehler nicht mehr in Abletons Log.txt protokolliert, sondern in separaten Dateien auf Ihrer Festplatte:(Ändern Sie für Mac
#username#
den Namen Ihres Benutzerordners. Unter Windows hat der Pfad zu Ihrem Benutzerordner ein anderes Format.)Wenn Sie die Dateien in einem Texteditor öffnen, der den Inhalt aktualisiert, wenn die Datei auf der Festplatte geändert wird (Beispiel für Mac: TextEdit nicht, TextWrangler jedoch), werden die Protokolle in Echtzeit aktualisiert.
Credits: Dieser Code wurde größtenteils aus den LiveAPI-Kontrolloberflächenskripten von Nathan Ramella kopiert
quelle