Oops, I did it again. Even though there exist some already, I made my own.
This time, I wasn't happy with any of the Python libraries I could find for providing progress reporting for command line applications. I admit I didn't look very far, since this was a simple thing to write.
Anyway, http://liw.fi/ttystatus/ has the gory stuff. A mutilated part of the example program, to whet your appetite:
ts = ttystatus.TerminalStatus(period=0.1) ts.add(ttystatus.Literal('Finding symlinks: ')) ts.add(ttystatus.Counter('symlink')) ts.add(ttystatus.Literal(' found; now at ')) ts.add(ttystatus.Index('pathname', 'pathnames')) ts.add(ttystatus.Literal(' (')) ts.add(ttystatus.PercentDone('done', 'total', decimals=2)) ts.add(ttystatus.Literal(' done) ')) ts.add(ttystatus.RemainingTime('done', 'total')) ts.add(ttystatus.Literal(' ')) ts.add(ttystatus.ProgressBar('done', 'total')) ts['pathnames'] = pathnames ts['done'] = 0 ts['total'] = len(pathnames) for pathname in pathnames: ts['pathname'] = pathname if os.path.islink(pathname): ts['symlink'] = pathname ts.notify('Symlink! %s' % pathname) ts['done'] += 1 ts.finish()
I am going to be using this in obnam, obviously. Actually, obnam already had some code like this, but I wanted to use it in other programs as well, so I extracted it, abstracted it, and make it more easily re-usable elsewhere.