Как сделать индикатор прогресса терминала, используя python?

Я пытался сделать это через .replace(), цикл сделал на абум

import time
slashS = "/"
refresh1 = slashS.replace("/", "-")
refresh2 = refresh1.replace(refresh1, "\\")
refresh3 = refresh2.replace(refresh2, slashS)

while True:
    
       print(refresh3, end="") 
       time.sleep(1)

это код должен писать "/" потом удалять, (но незаметно) писать "-", снова удалять, писать "\" и так по кругу.

Но программа которую я написал это всё делает, но "в уме", поэтому она выводит просто "/", а ещё она не остается на том же месте, а переходит на следующее место для символа.

при быстром стирании и печатании, это должно быть похоже на кружок


Ответы (2 шт):

Автор решения: strawdog

метод replace вам тут никак не поможет. алгоритм такой - выводите первый символ, ждете, выводите символ backspace (забой предыдущего символа), выводите следующий.

Ниже код для 100 циклов, если хотите, можете сделать его бесконечным:

UPDATE: справедливое дополнение от @CrazyElf - включить параметр flush

import time
from itertools import cycle
syms = ["/", "-", "\\"]
c = cycle(syms)

x = 0
while x < 100:    
    print(next(c), end="", flush=True) 
    time.sleep(.1)
    print("\b", end="") 
    x+=1
→ Ссылка
Автор решения: Johan

Если я вас правильно понял, то попробуйте так, только придумайте, как выходить из цикла:

while True:
    print(f'\r/', end='')
    print(f'\r-', end='')
    print(f'\r\\', end='')

Или так:

import sys

while True:
    sys.stdout.write("/" * 1)
    sys.stdout.flush()
    sys.stdout.write("\b")

    sys.stdout.write("-" * 1)
    sys.stdout.flush()
    sys.stdout.write("\b")

    sys.stdout.write("\\" * 1)
    sys.stdout.flush(
    sys.stdout.write("\b")

Что больше нравится. Только в PyCharm вы полноценного вращения не увидите. Запускайте в терминале или командной строке.

→ Ссылка