Merge branch 'output_to_arbitrary' of https://github.com/Auv5/tqdm into Auv5-output_to_arbitrary

Conflicts:
	tqdm.py
This commit is contained in:
Noam Yorav-Raphael 2014-01-11 23:40:14 +02:00
commit 4a2ab5b8af
1 changed files with 8 additions and 5 deletions

13
tqdm.py
View File

@ -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()