Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Bekas Docker Python Terpisah Saya Tidak Menunjukkan Output Cetakan?
Dalam aplikasi Python yang dijalankan dalam bekas Docker yang terpisah, anda mungkin menghadapi kekurangan output apabila menggunakan pernyataan cetakan. Isu ini timbul apabila strim STDOUT dan STDERR ditimbal dalam bekas.
Apabila anda melaksanakan apl Python (2.7) menggunakan CMD Docker ["python","main.py "], skrip main.py dimulakan dengan cetakan "Apl dimulakan" dan memasuki gelung tidak tentu. Memerhati bekas dengan bendera -it menunjukkan output yang dijangkakan dalam kedua-dua terminal dan log Docker.
Walau bagaimanapun, menggunakan bendera -d (mod tertanggal) melancarkan bekas tetapi menyekat output yang dijangka daripada kelihatan dalam log atau terminal.
Untuk menyelesaikan tingkah laku ini, pilihan output tanpa buffer Python boleh digunakan. Dengan mengubah suai CMD Fail Docker kepada CMD ["python","-u","main.py"], penimbalan STDOUT dan STDERR dilumpuhkan. Ini membolehkan Python mencetak serta-merta, menjadikan output kelihatan apabila menanyakan docker logs myapp.
Argumen -u memaksa Python untuk mengalirkan output ke aliran standard tanpa menunggu penimbal untuk diisi. Ini memastikan cetakan dipaparkan dengan segera, walaupun semasa skrip berjalan di latar belakang.
Berbeza dengan mencetak, menggunakan fungsi logging.warning("teks") modul pengelogan menjana keluaran serta-merta walaupun tanpa mod unbuffered. Ini kerana pengelogan mengendalikan pembilasan secara dalaman.
Dokumentasi Python untuk pilihan -u menyatakan bahawa ia menyahbuffer kedua-dua strim STDOUT dan STDERR, membenarkan paparan output langsung dalam bekas yang terpisah.
Atas ialah kandungan terperinci Mengapa Bekas Docker Python Terpisah Saya Tidak Menunjukkan Output Cetakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!