如何解决如何在 kubernetes 作业中查看 pod 的标准输出
我在 Kubernetes 有一份工作,有一个 python 脚本,该脚本将 tqdm 进度条打印到 stdout(或 stderr?)。但是,无法看到进度条:
kubectl logs test-qpgb7 # returns nothing
kubectl logs -f test-qpgb7 # hangs and returns nothing also
apiVersion: batch/v1
kind: Job
Metadata:
name: test
labels:
job: test
spec:
template:
spec:
containers:
- name: test
image: my-image
imagePullPolicy: IfNotPresent
command: ["python","test.py"]
restartPolicy: Never
backoffLimit: 1
# test.py
import tqdm
from time import sleep
if __name__ == "__main__":
for i in tqdm.tqdm(range(0,1000)):
sleep(2)
是否可以在作业尚未完成时查看进度条状态?作业完成时
kubectl logs test-qpgb7
确实有效。
# test.py
# import tqdm
from time import sleep
if __name__ == "__main__":
for i in range(0,1000):
print(str(i))
sleep(2)
FROM python:3.9.1
workdir /integrity
copY requirements.txt .
copY src/ .
RUN pip install -r requirements.txt
更新2:
在打印循环中添加 sys.stdout.flush()
:
if __name__ == "__main__":
for i in range(0,1000):
print(str(i))
sys.stdout.flush()
sleep(2)
仅对打印有效,对 tqdm 进度无效。注意 sys.stderr.flush()
也被添加,但没有成功。
from tqdm import tqdm
from time import sleep
import sys
if __name__ == "__main__":
for i in tqdm(range(0,1000),file=sys.stdout):
print("")
sys.stdout.flush()
sys.stderr.flush()
sleep(2)
# kubectl logs -f test007-ctqjh
0%| | 0/1000 [00:00<?,?it/s]
0%| | 1/1000 [00:02<33:20,2.00s/it]
0%| | 2/1000 [00:04<33:18,2.00s/it]
0%| | 3/1000 [00:06<33:16,2.00s/it]
0%| | 4/1000 [00:08<33:14,2.00s/it]
0%| | 5/1000 [00:10<33:12,2.00s/it]
1%| | 6/1000 [00:12<33:10,2.00s/it]
每次都打印在新行上。但是,如果有人找到如何在不打印到新行的情况下完成这项工作,将会很感兴趣。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。