code: def main():
      
      parser = argparse.ArgumentParser(description='Validate STIX Patterns.')
      parser.add_argument('-f', '--file',
                          help="Specify this arg to read patterns from a file.",
                          type=argparse.FileType("r"))
      args = parser.parse_args()
  
      pass_count = fail_count = 0
  
      # I tried using a generator (where each iteration would run raw_input()),
      # but raw_input()'s behavior seems to change when called from within a
      # generator: I only get one line, then the generator completes!  I don't
      # know why behavior changes...
      import functools
      if args.file:
          nextpattern = args.file.readline
      else:
          nextpattern = functools.partial(six.moves.input, "Enter a pattern to validate: ")
  
      try:
          while True:
              pattern = nextpattern()
              if not pattern:
                  break
              tests_passed, err_strings = validate(pattern, True)
  
              if tests_passed:
                  print("\nPASS: %s" % pattern)
                  pass_count += 1
  
              else:
                  for err in err_strings:
                      print(err, '\n')
                  fail_count += 1
      except (EOFError, KeyboardInterrupt):
          pass
      finally:
          if args.file:
              args.file.close()
  
      print("\nPASSED:", pass_count, " patterns")
      print("FAILED:", fail_count, " patterns")
docs: Continues to validate patterns until it encounters EOF within a pattern
      file or Ctrl-C is pressed by the user.