[Hinweis] [Einzeiliges Memo] Wenn Sie Python die Option -u hinzufügen, werden stdout und stderr ungepuffert. Praktisch, wenn es zum Abschlag geleitet wird

Der Titel dreht sich alles um den Inhalt, aber vorerst

python -c 'import time; print(1); time.sleep(1); print(2)

⇒ 1 wird angezeigt und nach einer Weile wird 2 angezeigt.

sh -c 'echo 1; sleep 1; echo 2'

⇒ 1 wird angezeigt und nach einer Weile wird 2 angezeigt.

python -c 'import time; print(1); time.sleep(1); print(2) | tee /dev/null

⇒ Nach einer Weile werden 1 und 2 gleichzeitig angezeigt

sh -c 'echo 1; sleep 1; echo 2' | tee /dev/null

⇒ 1 wird angezeigt und nach einer Weile wird 2 angezeigt.

Warum verhält es sich nur in Python anders?

Python ist intelligent. Wenn also stdout und stderr Terminals sind, puffern sie die Zeile, andernfalls puffern sie normal. (Wenn Sie viel ausgeben, ist die Pufferung überwiegend schneller.) Python macht es übrigens selbst, so dass der Befehl stdbuf sein Verhalten nicht ändern kann.

Mit der Option -u wird es ungepuffert.

python -u -c 'import time; print(1); time.sleep(1); print(2) | tee

⇒ 1 wird angezeigt und nach einer Weile wird 2 angezeigt.

Recommended Posts

[Hinweis] [Einzeiliges Memo] Wenn Sie Python die Option -u hinzufügen, werden stdout und stderr ungepuffert. Praktisch, wenn es zum Abschlag geleitet wird
Eine Funktionsnotiz, die nützlich ist, wenn Sie den Debugger aufrufen möchten, wenn beim Ausführen eines Python-Skripts ein Fehler auftritt.
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Was tun, wenn bei Verwendung von Python mit der NetBeans-IDE die Warnung "Falsche Python-Plattform" angezeigt wird?
Python Hinweis: Wenn Sie die Attribute eines Objekts kennen möchten
Was tun, wenn der Fehler RuntimeError angezeigt wird: Python wird nicht als Framework installiert, wenn Sie versuchen, matplitlib und pylab in Python 3.3 zu verwenden
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Was tun, wenn bei der Installation von openCV 3 der Fehler "Fehler: opencv3: Unterstützt nicht das Erstellen von Python 2- und 3-Wrappern" angezeigt wird
Option zum Deaktivieren des stdout / stderr-Puffers in Python
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Ein Hinweis auf Missverständnisse beim Versuch, das gesamte selbst erstellte Modul mit Python3 zu laden