gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:44:03 25 4
gpt4 key购买 nike

考虑这个 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不显示它。
  • MCVE 使用 python直接图像,但在我的实际用例中,我有一个来自自定义 Dockerfile 的自定义图像,它使用 FROM python .
  • 使用 capture_output=Truesubprocess.run调用然后打印捕获的输出对我来说不是一个选项,因为我的实际用例调用了一个子进程,该子进程将信息随时间打印到 stdout (与 python --version 不同),我不能等待它完成之后才打印整个输出。
  • 最佳答案

    正如@DavidMaze 在评论中指出的那样,我只需要设置 PYTHONUNBUFFERED环境变量到 1 .这可以通过例如:

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

    关于python - 如何防止 Docker 弄乱子进程输出顺序? (包括 MCVE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66911619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com