[英]docker-compose not printing stdout in Python app
默認情況下,Python 將輸出緩沖到sys.stdout
。
有幾個選項:
1. 調用顯式flush
重構原始打印語句以包含一個flush=True
關鍵字,例如:
print("Hello? Anyone there?", flush=True)
注意:這將導致整個緩沖區刷新,而不僅僅是相同的打印調用。 因此,如果其他地方有“裸”打印函數調用(即沒有flush=True
)沒有明確無緩沖,這些也將始終被刷新。
您可以通過以下方式實現相同的目的:
import sys
sys.stdout.flush()
如果您希望最大程度地控制何時發生沖洗,則此選項很有用。
2. 通過PYTHONUNBUFFERED
env var PYTHONUNBUFFERED
整個應用程序的緩沖
將以下內容放入docker-compose.yml
文件的environment
部分:
PYTHONUNBUFFERED: 1
這將導致立即刷新stdout
所有輸出。
3. 使用-u
運行 python
與上面的選項 #2 一樣,這將導致 Python 在應用程序的整個執行生命周期內“無緩沖”地運行。 只需運行python -u <entrypoint.py>
- 不需要環境變量。
很簡單,如果您在 Dockerfile 的行中添加選項 -u,它將打印您的日志:
CMD ["python", "-u", "my_python_script.py"]
無需更改環境變量或更改程序的所有打印語句。
使用pytest
,我的解決方案是添加-s
選項。
例如,在我還需要啟用詳細模式的場景中,我不得不放置pytest -sv
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.