Mit der Option "-u" behoben
docker-compose.yml
command: python -u main.py
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]
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