Heim > Backend-Entwicklung > Python-Tutorial > Warum zeigt mein abgetrennter Docker-Python-Container keine Druckausgabe an?

Warum zeigt mein abgetrennter Docker-Python-Container keine Druckausgabe an?

DDD
Freigeben: 2024-12-06 20:30:16
Original
661 Leute haben es durchsucht

Why Doesn't My Detached Docker Python Container Show Print Output?

Grundlegendes zum Druckverhalten in getrennten Docker-Python-Containern

In Python-Anwendungen, die in getrennten Docker-Containern ausgeführt werden, kann es bei Verwendung der print-Anweisung zu einem Mangel an Ausgabe kommen. Dieses Problem tritt auf, wenn die STDOUT- und STDERR-Streams im Container gepuffert werden.

Das Problem

Wenn Sie eine Python-App (2.7) mit Dockers CMD [„python“, „main.py“ ausführen "], das main.py-Skript initialisiert mit print „App gestartet“ und tritt in eine Endlosschleife ein. Wenn Sie den Container mit dem Flag -it beobachten, wird die erwartete Ausgabe sowohl in den Terminal- als auch in den Docker-Protokollen angezeigt.

Die Verwendung des Flags -d (getrennter Modus) startet jedoch den Container, unterdrückt jedoch, dass die erwartete Ausgabe im sichtbar ist Protokolle oder Terminal.

Die Lösung

Um dieses Verhalten zu beheben, kann die ungepufferte Ausgabeoption von Python verwendet werden. Durch Ändern des Dockerfile-CMD in CMD [„python“, „-u“, „main.py“] wird die Pufferung von STDOUT und STDERR deaktiviert. Dadurch kann Python sofort drucken und die Ausgabe sichtbar machen, wenn Docker-Protokolle von myapp abgefragt werden.

Warum ungepufferte Ausgabe?

Das Argument -u zwingt Python, die Ausgabe in die Standard-Streams zu spülen, ohne auf eine zu warten Puffer zum Füllen. Dadurch wird sichergestellt, dass Ausdrucke zeitnah angezeigt werden, auch wenn das Skript im Hintergrund läuft.

Zusätzliche Beobachtungen

Im Gegensatz zu Drucken wird die Funktion logging.warning("text") des Protokollierungsmoduls verwendet Erzeugt auch ohne ungepufferten Modus eine sofortige Ausgabe. Dies liegt daran, dass die Protokollierung das Leeren intern übernimmt.

In der Python-Dokumentation für die Option -u heißt es, dass sowohl STDOUT- als auch STDERR-Streams entpuffert werden, sodass die Live-Ausgabe in einem separaten Container angezeigt werden kann.

Das obige ist der detaillierte Inhalt vonWarum zeigt mein abgetrennter Docker-Python-Container keine Druckausgabe an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage