在窗口上没有换行的回车

时间:2017-06-04 16:01:35

标签: python windows python-3.x line-breaks carriage-return

所以我有这个简单的状态栏实现:

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兼容性的方式。)

1 个答案:

答案 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

的最后一次调用中打印的字符数