For my current project, there are some pieces of code that are slow and which I can't make faster. To get some feedback how much was done / has to be done, I've created a progress snippet which you can see below.
When you look at the last line
sys.stdout.write("\r100%" + " "*80 + "\n")
I use " "*80
to override eventually remaining characters. Is there a better way to clear the line?
(If you find the error in the calculation of the remaining time, I'd also be happy. But that's the question.)
Progress snippet
#!/usr/bin/env pythonimport time
import sys
import datetimedef some_slow_function():start_time = time.time()totalwork = 100for i in range(totalwork):# The slow parttime.sleep(0.05)if i > 0:# Show how much work was done / how much work is remainingpercentage_done = float(i)/totalworkcurrent_running_time = time.time() - start_timeremaining_seconds = current_running_time / percentage_donetmp = datetime.timedelta(seconds=remaining_seconds)sys.stdout.write("\r%0.2f%% (%s remaining) " %(percentage_done*100, str(tmp)))sys.stdout.flush()sys.stdout.write("\r100%" + " "*80 + "\n")sys.stdout.flush()if __name__ == '__main__':some_slow_function()
Consoles
I use ZSH most of the time, sometimes bash (and I am always on a Linux system)