所以我有这个简单的状态栏实现:
def status_update(current, top, label="Progress"):
workdone = current/top
print("\r{0:s}: [{1:30s}] {2:.1f}%".format(label,'#' * int(workdone * 30), workdone*100), end="", flush=True)
if workdone == 1:
print()
在linux上按预期工作。
在Windows上(10,在我的情况下),\r
显然为每个输出创建一个新行,而不是覆盖前面的。
我该怎么做? (最好以不破坏Linux兼容性的方式。)
答案 0 :(得分:2)
这可能不是最好的方法,但有效。只需使用\ b。
def status_update(current, top, label="Progress"):
workdone = current/top
if not hasattr(status_update, "length"):
status_update.length = 0
str1="{0:s}: [{1:30s}] {2:.1f}%".format(label,'#' * int(workdone * 30), workdone*100)
print(('\b'*status_update.length)+str1, end="", flush=True)
status_update.length=len(str1)
if workdone == 1:
print()
这里我退回了在status_update
的最后一次调用中打印的字符数