Python-Protokoll wird nicht mit Docker-Compose ausgegeben

Fazit

Mit der Option "-u" behoben

docker-compose.yml


command: python -u main.py

Hintergrund

Als ich die folgende Datei in command von docker-compose.yml angegeben habe, wurde nichts in das Protokoll ausgegeben. [^ 1]

[^ 1]: Es hat lange gedauert, bis ich bemerkte, dass es "nicht ausgegeben" statt "nicht funktioniert" war.

import time

print('hoge')

while True:
  print('fuga')
  time.sleep(1)

Wir werden es teilweise isolieren, um die Ursache zu untersuchen.

[^ 2]: Manchmal wurde es ausgegeben, als ich die import-Anweisung löschte, aber dies funktionierte aufgrund eines Fehlers einfach nicht mehr in dieser Zeile

Schließlich habe ich das Python-Skript Zeile für Zeile auskommentiert und schließlich festgestellt, dass das folgende "while True:" das Problem zu sein schien. [^ 2]

Standardausgabe und Pufferung

Die Standardausgabe von Pythons print () usw. wird nicht sofort ausgegeben, sondern gepuffert und entsprechend dem Timing ausgegeben.

Dies bedeutete, dass das Ergebnis nicht an den Docker-Compose übergeben wurde, der die Ausgabe empfangen hatte, da "while True:" die Ausführung nie beendete und der Puffer nie voll war.

python hat eine Option -u zum Deaktivieren der Pufferung, die ich durch Angabe gelöst habe.

Referenz: So stoppen Sie die Blockpufferung der Standardausgabe in Python 3-Qiita Geheimnisvolles Verhalten des Kopfbefehls und Pufferung der Standardeingabe / -ausgabe - CUBE SUGAR CONTAINER

Recommended Posts

Python-Protokoll wird nicht mit Docker-Compose ausgegeben
Unit Test Log Ausgabe mit Python
Python-Protokoll mit GAE an die Konsole ausgeben
Python-Umgebung mit Docker-Compose
Ausgabeprotokoll im JSON-Format mit Python-Standardprotokollierung
Python-Runde ist nicht streng rund
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
[Python] Was ist eine with-Anweisung?
Machen Sie Apache Log CSV mit Python
Ausgabe in eine CSV-Datei mit Python
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
[Hinweis] Hallo Weltausgabe mit Python
Beschleunigen Sie Python mit numba grob
[python3] Implementieren Sie die Debug-Protokollausgabefunktion einfach mit Protokollierung und Klicken
Python Hinweis: Wenn easy_install nicht verwendet werden kann
[Python] Namensfehler: name'urlparse 'ist nicht definiert
Mit PEP8 und PEP257 ist es nicht peinlich, Python-Codierung zu zeigen!
Geben Sie Farbzeichen mit Python zu hübsch aus
[Python] Runden Sie nur mit dem Operator ab
Python-Protokoll ausgeben
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
Wenn das von rsyslog erfasste Protokoll nach der Drehung mit logrotate nicht aktualisiert wird
CSV-Ausgabe der Google-Suche mit [Python]! 【Einfach】
Die Abfrage [Webentwicklung mit Python] wird ebenfalls umgeleitet
Ich habe versucht, LLVM IR mit Python auszugeben
Melden Sie sich mit Selenium Python bei Yahoo Business an
Was vergleichst du mit Python und ==?
[Python] Ausdruck (1,2) macht kein Taple mit Klammern
[CentOS8] So geben Sie die Standard-Python-Ausgabe in das Systemd-Protokoll aus
FizzBuzz in Python3
Scraping mit Python
Python ist einfach
Scraping mit Python
Python mit Go
Python-Lernausgabe
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Was ist Python?
Bingo mit Python
Zundokokiyoshi mit Python
Python ist eine Instanz
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Was ist Python?
Prozedur zum Laden von MNIST mit Python und zur Ausgabe an png
Python> nicht np.isnan (loss_value) behaupten, 'Modell divergiert mit Verlust = NaN'
Beachten Sie, dass das Schreiben mit Ruby so ist wie das Schreiben mit Python
Warum nicht einfach mit Python eine stilvolle Tabelle erstellen?
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess