code: def react(reactor, main, argv):
      
      stopping = []
      reactor.addSystemEventTrigger('before', 'shutdown', stopping.append, True)
      finished = main(reactor, *argv)
      finished.addErrback(err, "main function encountered error")
      def cbFinish(ignored):
          if not stopping:
              reactor.callWhenRunning(reactor.stop)
      finished.addCallback(cbFinish)
      reactor.run()
docs: Call C{main} and run the reactor until the L{Deferred} it returns fires.
  
      @param reactor: An unstarted L{IReactorCore} provider which will be run and
          later stopped.
  
      @param main: A callable which returns a L{Deferred}.  It should take as
          many arguments as there are elements in the list C{argv}.
  
      @param argv: A list of arguments to pass to C{main}.
  
      @return: C{None}