diff --git a/tqdm.py b/tqdm.py index d817f4d4..8e4851f7 100644 --- a/tqdm.py +++ b/tqdm.py @@ -39,15 +39,16 @@ def format_meter(n, total, elapsed): return '%d [elapsed: %s, %s iters/sec]' % (n, elapsed_str, rate) class StatusPrinter(object): - def __init__(self): + def __init__(self, output_to=sys.stdout): + self.output_to = output_to self.last_printed_len = 0 def print_status(self, s): - sys.stdout.write('\r'+s+' '*max(self.last_printed_len-len(s), 0)) - sys.stdout.flush() + self.output_to.write('\r'+s+' '*max(self.last_printed_len-len(s), 0)) + self.output_to.flush() self.last_printed_len = len(s) -def tqdm(iterable, desc='', total=None, leave=False, mininterval=0.5, miniters=1): +def tqdm(iterable, desc='', total=None, leave=False, mininterval=0.5, miniters=1, output_to=sys.stdout): """ Get an iterable object, and return an iterator which acts exactly like the iterable, but prints a progress meter and updates it every time a value is @@ -60,6 +61,8 @@ def tqdm(iterable, desc='', total=None, leave=False, mininterval=0.5, miniters=1 iterating over all elements. If less than mininterval seconds or miniters iterations have passed since the last progress meter update, it is not updated again. + 'output_to' can be a file-like object to output the progress message to + If not specified, prints to sys.stdout. """ if total is None: try: @@ -69,7 +72,7 @@ def tqdm(iterable, desc='', total=None, leave=False, mininterval=0.5, miniters=1 prefix = desc+': ' if desc else '' - sp = StatusPrinter() + sp = StatusPrinter(output_to) sp.print_status(prefix + format_meter(0, total, 0)) start_t = last_print_t = time.time()