Probléma: A Docker konténerbe csomagolt, majd docker-compose-zal futtatott Python alkalmazás alkalmazásban nem (mindig) működik a print() parancs. Konténeren kívül ugyanakkor minden rendben.
Ok: A Python úgynevezett output bufferinget használ, melynek lényege, hogy a print() által kiírt üzenet nem kerül azonnal megjelenítésre, hanem vár valamire, például úgy sor /n
karakterre. Ez normál esetben lehet, hogy fel sem tűnik.
Megoldás #1: Ha nem zavar a jelenség, de van néhány üzenet, amit mindenképpen meg akarsz jeleníteni, akkor a flush = true
paramétert add meg a print()
-nek: print("Hello World", flush = True)
Megoldás #2: Ha bizonyos eseményekkor szeretnél minden üzenetet látni, akkor a sys
modul kell neked és ez a parancs: sys.stdout.flush()
Megoldás #3: Ha mindig mindent azonnal szeretnél látni, akkor a PYTHONUNBUFFERED
környezeti változó értéke legyen 1
. Ez beállítható a Dockerfile-ban az ENV PYTHONUNBUFFERED 1
sorral vagy a docker-compose.yaml-ban is az environment
szekcióban.
Megoldás #4: Ha van lehetőséged a Python indítási paramétereinek a változtatására, akkor az -u
paraméter szinten eléri a kívánt célt.