Nadpisywany output w jednej linijce. Flush coś nie bardzo

0

Powiedzmy że chcę żeby wszystko ze stdout nadpisywało poprzednią rzecz w tej samej linijce, coś takiego jak się robi podając np obecna wartość prędkości zapisu, bo przecież nie robi się nowej linijki co 1/10 sekundy. Jak to najlepiej zrobić w Pythonie 3? Próbowałem coś takiego ale to wszystko zaczyna printować po ostatnim elemencie a nie w jego miejscu:

>>> print(*objects, sep=' ', end=' ', file=sys.stdout, flush=True)
1 2 3 4 5 6 7 8 9 10 

I jeszcze jedno, jak mam jakąś prostą operacje na 1K obiektów którą wykonuje w 5s, to jak w pętli dodam żeby wyprintowało mi przy którym jest obiekcie to czas wykonania całego skryptu zostaje wzbogacony kulturowo o pół minuty(dafuq), to jakiś problem po mojej stronie czy printowanie zawsze jest takie bolesne dla wydajności kodu?

0

Znak \r w napisie nakazuje cofnięcie się na początek linii. Wypróbuj taki kod:

import time

def foo():
    for i in range(100):
        print('\r{:2d}'.format(i), end='')
        time.sleep(1)

foo()
0

Natknąłem się na to [code] \r [/code], jednak nic mi to nie dało więc stwierdziłem że to pewnie działa tylko w starym pythonie. U mnie ten kod który pokazałeś daje taki dziwny out:
TEST

Nawet jak chce wkleić dokładnie ten output który widzę to się nie da, printuje wszystko po nowych liniach gdyby patrzeć na to co się pojawia w schowku mimo że na ekranie wygląda inaczej, więc aż musiałem screena zrobić, dziwne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1