使用 python openstack SDK,您可以逐块下载图像,这使我可以显示进度条。
上传文件时您似乎不能这样做。
我想要的是能够显示正在上传的文件的进度条(以与正在下载的文件相同的方式)。
有没有办法将一种“文件读取”回调附加到文件对象?所以每次阅读时我都可以显示进度条?
我确实查看了 python 文件对象文档,但我真的找不到任何确定的东西。
附言
对于那些感兴趣的人,我的代码:
ESCAPE = {
'c': { # colours
'fg': { # foreground
'b': '30', # black
'r': '31', # red
'g': '32', # green
'y': '33', # yellow
'u': '34', # blue
'p': '35', # purple
'c': '36', # cyan
'w': '37', # white
},
'bg': { # background
'b': '40', # black
'r': '41', # red
'g': '42', # green
'y': '43', # yellow
'u': '44', # blue
'p': '45', # purple
'c': '46', # cyan
'w': '47', # white
}
},
's': { # style
'n': '0', # none
'b': '1', # bold
'u': '2', # underline
'n1': '3', # negative1
'n2': '5', # negative2
},
't': '\033[{s};{fg};{bg}m' # template
}
def spinner(msg: str):
template = f"{colour(fg='p', s='b')}{'{}'}{colour()} {msg}"
while True:
for spin in '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏':
yield template.format(spin)
def progress(end: int, max_col=78):
template = f"[{colour(bg='g')}{'{}'}{colour(bg='r')}{'{}'}{colour()}|{'{}'}]"
for p in range(1, end):
bar = ' ' * int(max_col * p/(end-1))
togo = ' ' * int(max_col - len(bar))
perc = "%6.2f %%" % (p/(end-1)*100)
yield template.format(bar, togo, perc)
def colour(fg='w', bg='b', s='n'):
return ESCAPE['t'].format(
s=ESCAPE['s'][s],
fg=ESCAPE['c']['fg'][fg],
bg=ESCAPE['c']['bg'][bg]
)