我想同时在 Docker 上执行多个 python 脚本。但我发现输出顺序有些奇怪。下面是我的测试 python 脚本。import randomimport timeprint("start test")# sleep timern = random.randint(30, 45)# file numberrn_fn = random.randint(0, 10000000)print("sleep %s seconds ..." % rn)time.sleep(rn)print("write file python_test%s_%s ..." % (rn_fn, rn))txt_file = open('/app/python_test%s_%s.txt' % (rn_fn, rn), 'w')txt_file.write('test %s!' % rn_fn)txt_file.close()print("end write file")当我在 CentOS7 上运行 python 脚本两次时python test.py &python test.py &输出是00:00 - start test(1)00:00 - start test(2)00:00 - sleep 35 seconds ...(1)00:00 - sleep 40 seconds ...(2)00:35 - write file ~.txt(1)00:35 - end write file(1)00:40 - write file ~.txt(2)00:40 - end write file(2)但是当我在 docker 上执行它时docker exec -i container_name /app/test.py &docker exec -i container_name /app/test.py &输出是00:00 - start test(1)00:00 - sleep 35 seconds ...(1)00:35 - write file ~.txt(1)00:35 - end write file(1)00:00 - start test(2)00:00 - sleep 40 seconds ...(2)00:40 - write file ~.txt(2)00:40 - end write file(2)为什么 CentOS 和 docker 中 print() 的顺序不同?docker 进程结束时是否打印?
1 回答
狐的传说
TA贡献1804条经验 获得超3个赞
如果您从 Docker 容器运行 Python 脚本,默认情况下它没有 tty,当您要运行容器时,您必须--tty
添加-t
,
docker run -t yourimage
如果您不希望容器执行此操作,您可以通过在打印方法中添加flush参数来强制Python进行刷新。
print("Begin", flush=True)
添加回答
举报
0/150
提交
取消