Возникли проблемы с time.sleep - PullRequest
2 голосов
/ 12 мая 2010

Когда я бегу, например:

print("[",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("=",end=" ")
time.sleep(1)
print("]",end=" ")

Ничего не происходит в течение 10 секунд, затем появляется целое [= = = = = = = = = =]. Как я могу предотвратить это, чтобы он мог действовать как своего рода индикатор выполнения?

Ответы [ 4 ]

5 голосов
/ 12 мая 2010

Попробуйте очищать стандартный вывод после каждого отпечатка:

import sys

print("=",end=" ")
sys.stdout.flush()
3 голосов
/ 12 мая 2010

На самом деле, индикатор выполнения принадлежит sys.stderr, который (очень удобно и совсем не случайно) не буферизуется. Поэтому я предлагаю вам:

print("=", end=" ", file=sys.stderr)

вместо.

PS краткий обзор стандартных потоков ввода, вывода и ошибок в POSIX-совместимых операционных системах можно найти в Википедии: Стандартные потоки . В двух словах: стандартный ввод - это вход в процесс; stdout - полезный вывод процесса, результаты; stderr предназначен для вывода предупреждений, ошибок и внеполосных (например, индикаторов выполнения).

0 голосов
/ 12 мая 2010

Вам нужно очищать stdout, используя sys.stdout.flush() каждый раз, когда вы хотите написать обновления.

0 голосов
/ 12 мая 2010
...