Mercurial > hgbook
view en/examples/run-example @ 3:906d9021f9e5
Making progress on autogenerated example output.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Sat, 24 Jun 2006 17:42:40 -0700 |
parents | |
children | 33a2e7b9978d |
line wrap: on
line source
#!/usr/bin/python import cStringIO import os import pty import re import sys class example: def __init__(self, name): self.name = name def parse(self): fp = open(self.name) cfp = cStringIO.StringIO() for line in fp: cfp.write(line) if not line.rstrip().endswith('\\'): yield cfp.getvalue() cfp.seek(0) cfp.truncate() name_re = re.compile('#\s*name:\s*(.*)$') def status(self, s): sys.stdout.write(s) if not s.endswith('\n'): sys.stdout.flush() def run(self): ofp = None self.status('running %s ' % os.path.basename(self.name)) for hunk in self.parse(): m = self.name_re.match(hunk) if m: self.status('.') out = m.group(1) assert os.sep not in out if out: ofp = open('%s.%s.out' % (self.name, out), 'w') else: ofp = None elif ofp: ofp.write(hunk) self.status('\n') def main(path='.'): args = sys.argv[1:] if args: for a in args: example(a).run() return for name in os.listdir(path): if name == 'run-example' or name.startswith('.'): continue if name.endswith('.out') or name.endswith('~'): continue example(os.path.join(path, name)).run() if __name__ == '__main__': main()