From 6464656661ffafda8f68aae8c6e0f751cc1de78c Mon Sep 17 00:00:00 2001 From: Jack McCracken Date: Fri, 10 Jan 2014 15:33:17 -0500 Subject: [PATCH 1/2] Added an argument to output to any filelike object. Defaults to sys.stdout. My editor added a newline to the end of the file, which is PEP8 compliant, so I left it in. --- tqdm.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tqdm.py b/tqdm.py index 070bb004..9e53ad02 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 @@ -69,7 +70,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() @@ -97,4 +98,4 @@ def tqdm(iterable, desc='', total=None, leave=False, mininterval=0.5, miniters=1 def trange(*args, **kwargs): """A shortcut for writing tqdm(xrange)""" - return tqdm(xrange(*args), **kwargs) \ No newline at end of file + return tqdm(xrange(*args), **kwargs) From 2cc124dbe5e9d39023a2cbbd9e1d218dcb5b6fe5 Mon Sep 17 00:00:00 2001 From: Jack McCracken Date: Fri, 10 Jan 2014 15:54:35 -0500 Subject: [PATCH 2/2] Added documentation for the output_to argument. --- tqdm.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tqdm.py b/tqdm.py index 9e53ad02..0db292d8 100644 --- a/tqdm.py +++ b/tqdm.py @@ -61,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: