#!/usr/bin/env python import os, sys import getopt import re def usage(): print """usage: %s [OPTION] FILE... -e launch editor after creating files. Uses editor from $EDITOR envvar. -f overwrite existing files -h show this help and exit""" % (os.path.basename(sys.argv[0])) def main(): try: opts, args = getopt.getopt(sys.argv[1:], "efh") except getopt.GetoptError, err: print str(err) usage() sys.exit(2) if len(args) < 1: usage() sys.exit(2) overwrite = False launch_editor = False for o, a in opts: if o == "-e": launch_editor = True elif o == "-f": overwrite = True elif o == "-h": usage() sys.exit() else: assert False, "unhandled option" p = re.compile('[a-zA-Z0-9._-]+\.h') for f in args: if not p.match(f): print "Invalid header filename '%s'. Header not created" % f continue if not overwrite and os.path.exists(f): print "Header file '%s' already exists. Use -f to override." % f continue print "Creating %s..." % f q = re.compile('[.-]') define = q.sub('_', f.upper()) f = open(f, 'w') f.write('#ifndef _%s_\n' % define) f.write('#define _%s_\n\n' % define) f.write('/* TODO: Your code here */\n\n') f.write('#endif /* _%s_ */' % define) f.close() if launch_editor: editor = os.getenv("EDITOR") if editor is None: editor = "vi" # Fork an editor for each file as not all editors support # editing multiple files at once (e.g. splitted view in vim) for f in args: print "Editing header '%s' with '%s'" % (f, editor) pid = os.fork() if pid == 0: # child process os.execvp(editor, [editor, f]) sys.exit(0) else: # parent process os.waitpid(pid, 0) if __name__ == '__main__': main()