问题描述
考虑这个 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
映像,但在我的实际用例中,我有一个来自使用FROM python
的自定义 Dockerfile 的自定义映像。 - 在
capture_output=True
调用中使用subprocess.run
然后打印捕获的输出对我来说不是一个选项,因为我的实际用例调用了一个子进程,该子进程随着时间的推移将信息打印到stdout
(不像python --version
) 并且我不能等待它完成之后才打印整个输出。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)