如何防止 Docker 弄乱子进程输出顺序? (包括 MCVE)

How to prevent Docker from messing with subprocess output order? (MCVE included)

考虑这个 issue.py 文件:

import subprocess

print('Calling subprocess...')
subprocess.run(['python', '--version'])
print('Subprocess is done!')

手动执行 python issue.py 会产生我期望的结果:

Calling subprocess...
Python 3.9.0
Subprocess is done!

但是,如果我在 Docker 容器中执行此操作,则会发生一些奇怪的事情:

$ docker run --rm -v $(pwd):/issue python:3.9.0 python /issue/issue.py
Python 3.9.0
Calling subprocess...
Subprocess is done!

如何解决这个问题,使 Docker 遵守正确的输出顺序?

备注:

正如@DavidMaze 在评论中指出的那样,我只需要将 PYTHONUNBUFFERED 环境变量设置为 1。这可以通过以下方式完成:

docker run --rm -e PYTHONUNBUFFERED=1 -v $(pwd):/issue python:3.9.0 python /issue/issue.py