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

考虑这个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 尊重正确的输出顺序?

笔记:

  • 这个问题也发生在stderr,虽然上面的MCVE没有显示它。
  • MCVEpython直接使用图像,但在我的实际用例中,我有一个来自自定义 Dockerfile 的自定义图像,该文件使用FROM python.
  • capture_output=Truesubprocess.run调用中使用然后打印捕获的输出对我来说不是一个选项,因为我的真实用例调用了一个子进程,它会随着时间的推移将信息打印到stdout(与 不同python --version)并且我不能等待它完成之后才打印整个输出。
以上是如何防止Docker弄乱子进程输出顺序?(包括MCVE)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>