While Loop Not Working (Function and Time.Sleep)

My while loop prints nothing when it is running.

import os
import time

place = 10

running = True

def Write():
  j = 1
  for i in range(place - 1):
    print("-", end = "")
    j += 1
  print("a", end = "")
  for k in range(10 - j):
    print("-", end = "")

while running:
  Write()
  time.sleep(5)
  if place > 1:
    place -= 1
  os.system("clear")

When there is just the print and a time.sleep, the while loop works.

while running:
  print("Looping...")
  time.sleep(5)

When there is the function and a time.sleep, the code doesn’t work.

while running:
  Write()
  time.sleep(5)

Please tell me how to fix this.

>Solution :

I got puzzled by what you discovered, and now found a solution to this interesting behavior; you can use flush=True parameter to force flushing:

import os
import time

place = 10

running = True

def Write():
  j = 1
  for i in range(place - 1):
    print("-", end = "")
    j += 1
  print("a", end = "", flush=True)
  for k in range(10 - j):
    print("-", end = "", flush=True)

while running:
  Write()
  time.sleep(1)
  if place > 1:
    place -= 1
  os.system("clear")

Whether the output is buffered is usually determined by file, but if the flush keyword argument is true, the stream is forcibly flushed.—https://docs.python.org/3/library/functions.html#print

Alternatively, (i) putting print() (without end) at the end of Write, or (ii) making Write to return a string (not print inside the function) and printing the string outside the function (in the while loop) seems to work. Green Cloak Guy’s solution in the comment section, i.e., sys.stdout.flush() works too.

It seems to me that end='' makes python or console reluctant to show the characters eagerly (in some cases), waiting for a line to end.

Leave a Reply