def completer(text, state): from life import get_kernel kernel = get_kernel() try: matches = completions[text] except KeyError: matches = [value for value in kernel.cmnd.keys() if value.startswith(text)] try: return matches[state] except: return None
def run(self): """ start this bot. this function does not return until KeyboardInterrupt """ kernel = get_kernel() kernel.boot() self.cfg.server = kernel.host self.cfg.user = kernel.shelluser if kernel.run_args and not "start" in kernel.run_args: kernel.handle_args() ; return if not kernel.silent: print("commands are: %s\n" % ", ".join(kernel.cmnd.keys())) try: readline.set_completer(completer) readline.parse_and_bind("tab: complete") self.hfile = j(kernel.root, "run", "history") if not os.path.isfile(self.hfile): utils.touch(self.hfile) if hasattr(readline, "read_history_file"): readline.read_history_file(self.hfile) except: logging.error("no readline") self.stopped = False kernel.bot.register("bot", "console", self) while not self.stopped: try: intxt = input("%s -=- %s%s<%s " % (time.strftime(datefmt), BOLD, YELLOW, ENDC)) if not intxt: continue if self.stopped: return event = O(bot=self, origin=kernel.shellid, channel="shell", input=intxt, cbtype="CONSOLE") event.prepare() e = kernel.put(event) e.wait() except TryAgain: continue except NoCommand as ex: self._raw("no %s command available\n" % str(ex)) except (KeyboardInterrupt, EOFError): break except: error()
def handle_task(self, *args, **kwargs): if not args: raise NoTask() task = args[0] kernel = get_kernel() if "do_exec" in task: kernel.execute(task) else: try: if task.bot: task.bot.run_cb(task) kernel.run_cb(task) msg = "elapsed %s" % (time.time() - self.lasttime) except Exception as ex: msg = error() ; task.do_display = True task.status[str(time.ctime(time.time()))] = msg
def shutdown(): """ shutdown L I F E. """ from life import get_kernel kernel = get_kernel() try: kernel.shutdown() except: error() try: os.remove('life.pid') except: pass if not kernel.run_args: sys.stdout.write("\n") sys.stdout.flush() time.sleep(0.1) os._exit(0)