import time def show_progress(command, step, total, since=None): progress = step * 100 // total filled = progress // 2 blank = 50 - filled template = "\r%(step)s (%(progress)s%%) [%(progressbar)s]%(estimation)s" variables = { "step": str(step).rjust(len(str(total))), "progress": str(progress).rjust(3), "progressbar": "".join(["=" * filled, " " * blank]), "estimation": get_estimation_str(since, progress, step, total), } command.stdout.write(template % variables, ending="") command.stdout.flush() def get_estimation_str(since, progress, step, total): if not since: return "" progress_float = float(step) * 100.0 / float(total) if progress_float == 0: return " --:--:-- est." step_time = (time.time() - since) / progress_float estimated_time = (100 - progress) * step_time clock = time.strftime("%H:%M:%S", time.gmtime(estimated_time)) return " %s est." % clock