code: def watch_folder():
      
      argv = sys.argv[1:] if len(sys.argv) > 1 else []
      args = arg_parser.parse_args(sys.argv[1:])
      compiler_args = {}
      
      input_folder = os.path.realpath(args.input_dir)
      if not args.output_dir:
          output_folder = input_folder
      else:
          output_folder = os.path.realpath(args.output_dir)
      
      if args.verbose:
          Options.VERBOSE = True
          print "Watching {} at refresh interval {} seconds".format(input_folder, args.refresh)
      
      if args.extension:
          Options.OUTPUT_EXT = args.extension
      
      if getattr(args, 'tags', False):
          hamlpynodes.TagNode.self_closing.update(args.tags)
      
      if args.input_extension:
          hamlpy.VALID_EXTENSIONS += args.input_extension
      
      if args.attr_wrapper:
          compiler_args['attr_wrapper'] = args.attr_wrapper
      
      if args.jinja:
          for k in ('ifchanged', 'ifequal', 'ifnotequal', 'autoescape', 'blocktrans',
                    'spaceless', 'comment', 'cache', 'localize', 'compress'):
              del hamlpynodes.TagNode.self_closing[k]
              
              hamlpynodes.TagNode.may_contain.pop(k, None)
          
          hamlpynodes.TagNode.self_closing.update({
              'macro'  : 'endmacro',
              'call'   : 'endcall',
              'raw'    : 'endraw'
          })
          
          hamlpynodes.TagNode.may_contain['for'] = 'else'
      
      while True:
          try:
              _watch_folder(input_folder, output_folder, compiler_args)
              time.sleep(args.refresh)
          except KeyboardInterrupt:
              # allow graceful exit (no stacktrace output)
              sys.exit(0)
docs: Main entry point. Expects one or two arguments (the watch folder + optional destination folder).