def run_script(self, script_path): dirtscript = ModuleType("dirtscript") dirtscript.__dict__.update({"settings": self.settings}) sys.modules["dirtscript"] = dirtscript setup_logging(script_path, self.settings) execfile(script_path) return 0
def run_script(self, script_path): dirtscript = ModuleType("dirtscript") dirtscript.__dict__.update({ "settings": self.settings, }) sys.modules["dirtscript"] = dirtscript setup_logging(script_path, self.settings) execfile(script_path) return 0
def run_app(self, app_name, app_settings, app_argv): app_settings.get_api = self.get_api_factory() setup_logging(app_name, app_settings) use_reloader = getattr(app_settings, "USE_RELOADER", False) if use_reloader and not app_settings.stop_app: from .reloader import run_with_reloader setproctitle("%s-reloader" % (app_name,)) return run_with_reloader(lambda: self._run(app_name, app_settings, app_argv)) else: return self._run(app_name, app_settings, app_argv)
def run_app(self, app_name, app_settings, app_argv): app_settings.get_api = self.get_api_factory() setup_logging(app_name, app_settings) use_reloader = getattr(app_settings, "USE_RELOADER", False) if use_reloader and not app_settings.stop_app: from .reloader import run_with_reloader setproctitle("%s-reloader" %(app_name, )) return run_with_reloader( lambda: self._run(app_name, app_settings, app_argv)) else: return self._run(app_name, app_settings, app_argv)
def run_many(self, argv=None): if argv is None: argv = sys.argv run_argv, app_argvs = self.parse_argv(argv) ret = self.handle_argv(run_argv) if ret is not None: return ret if not app_argvs: self.usage(argv) return 1 class RUN_SETTINGS: log_to_hub = False logging_settings = SettingsWrapper(RUN_SETTINGS, self.settings) setup_logging("run", logging_settings) # Check to see if we're running a script if "/" in app_argvs[0][0]: # XXX: Hack. Not sure how we want to rewrite sys.argv in the case # of running scripts (which don't fork, so can't have multiple # things running, so the argv parsing we did above is partially # moot) argv[0] = "%s %s" % (run_argv[0], app_argvs[0][0]) script_path = argv.pop(len(run_argv)) return self.run_script(script_path) app_names_settings = [(app_argv[0], self.get_app_settings(app_argv[0]), app_argv[1:]) for app_argv in app_argvs] self._get_api_force_no_mock.update(argv[1:]) app_colors = iter(itertools.cycle(["blue", "magenta", "cyan", "green", "grey", "white"])) pid = -1 try: app_pids = {} for app_name, app_settings, app_argv in app_names_settings: app_color = next(app_colors) pid = fork() if pid > 0: app_pids[pid] = app_name else: os.setsid() ColoredFormatter.app_color = app_color return self.run_app(app_name, app_settings, app_argv) while app_pids: try: child, status_sig = os.waitpid(-1, 0) status = status_sig >> 8 except KeyboardInterrupt: status = 4 if status == 99: app_pids.pop(child, None) status = 0 continue if status != 4: log_message = (status == 0) and log.info or log.warning log_message("app %s exited with status %s", app_pids.get(child, child), status) break finally: pids_to_kill = (pid > 0) and app_pids.keys() or [] for pid_to_kill in pids_to_kill: try: os.killpg(pid_to_kill, signal.SIGTERM) except OSError as e: # errno 3 == "ESRCH" (not found), and we expect to get at least # one of those when we exit as a result of one of the # apps exiting. # errno 1 == "EPERM" (permision denied), and this seems # to be related to a specific "issue" related to killing # process groups which contain zombies on Darwin/BSD. It # doesn't seem to come up on Linux, though, and so should # be safe to ignore. # See discussion: http://stackoverflow.com/q/12521705/71522 if e.errno not in [1, 3]: log.error("killing %r: %s", pid_to_kill, e) return status
def run_many(self, argv=None): if argv is None: argv = sys.argv run_argv, app_argvs = self.parse_argv(argv) ret = self.handle_argv(run_argv) if ret is not None: return ret if not app_argvs: self.usage(argv) return 1 class RUN_SETTINGS: log_to_hub = False logging_settings = SettingsWrapper(RUN_SETTINGS, self.settings) setup_logging("run", logging_settings) # Check to see if we're running a script if "/" in app_argvs[0][0]: # XXX: Hack. Not sure how we want to rewrite sys.argv in the case # of running scripts (which don't fork, so can't have multiple # things running, so the argv parsing we did above is partially # moot) argv[0] = "%s %s" % (run_argv[0], app_argvs[0][0]) script_path = argv.pop(len(run_argv)) return self.run_script(script_path) app_names_settings = [ (app_argv[0], self.get_app_settings(app_argv[0]), app_argv[1:]) for app_argv in app_argvs ] self._get_api_force_no_mock.update(argv[1:]) app_colors = iter(itertools.cycle( ["blue", "magenta", "cyan", "green", "grey", "white"] )) pid = -1 try: app_pids = {} for app_name, app_settings, app_argv in app_names_settings: app_color = next(app_colors) pid = fork() if pid > 0: app_pids[pid] = app_name else: os.setsid() ColoredFormatter.app_color = app_color return self.run_app(app_name, app_settings, app_argv) while app_pids: try: child, status_sig = os.waitpid(-1, 0) status = status_sig >> 8 except KeyboardInterrupt: status = 4 if status == 99: app_pids.pop(child, None) status = 0 continue if status != 4: log_message = (status == 0) and log.info or log.warning log_message("app %s exited with status %s", app_pids.get(child, child), status) break finally: pids_to_kill = (pid > 0) and app_pids.keys() or [] for pid_to_kill in pids_to_kill: try: os.killpg(pid_to_kill, signal.SIGTERM) except OSError as e: # errno 3 == "ESRCH" (not found), and we expect to get at least # one of those when we exit as a result of one of the # apps exiting. # errno 1 == "EPERM" (permision denied), and this seems # to be related to a specific "issue" related to killing # process groups which contain zombies on Darwin/BSD. It # doesn't seem to come up on Linux, though, and so should # be safe to ignore. # See discussion: http://stackoverflow.com/q/12521705/71522 if e.errno not in [1, 3]: log.error("killing %r: %s", pid_to_kill, e) return status