python - Vognretur uden linjeskift på vinduer

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg har denne enkle statusbar implementering:


def status\_update(current, top, label="Progress"):
    workdone = current/top
    print("
{0:s}: [{1:30s}] {2:.1f}\%".format(label,'#' * int(workdone * 30), workdone*100), end="", flush=True)
    if workdone == 1:
        print()


Fungerer som forventet på Linux.


På Windows (10, i mit tilfælde) skaber tilsyneladende en ny linje for hver output i stedet for at overskrive det foregående.


Hvordan stopper jeg det? (Fortrinsvis på en måde, der ikke bryder Linux-kompatibilitet.)

Bedste reference


Dette er måske ikke den bedste måde at gøre dette på, men fungerer. Bare brug \ 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((''*status\_update.length)+str1, end="", flush=True)
    status\_update.length=len(str1)
    if workdone == 1:
        print()


her er jeg backspacing antal tegn, der er trykt i sidste opkald af status\_update