class console(Cmd): def __init__(self, completekey='tab', stdin=None, stdout=None): Cmd.__init__(self, completekey, stdin, stdout) self.history = history() self.api = ApiManager() self.vfs = self.api.vfs() self.taskmanager = self.api.TaskManager() self.line_to_arguments = line_to_arguments.Line_to_arguments() self.old_completer = "" self.prompt = "dff / > " self.intro = "\n##########################################\n\ # Welcome on Digital Forensics Framework #\n\ ##########################################\n" self.stdin = self self.completekey = '\t' self.comp_raw = complete_raw_input(self) self.completion = completion.Completion(self.comp_raw) if os.name == 'posix': signal.signal(signal.SIGTSTP, self.bg) def bg(self, signum, trace): if self.taskmanager.current_proc: proc = self.taskmanager.current_proc proc.exec_flags += ["thread"] print "\n\n[" + str(proc.pid) + "]" + " background " + proc.name self.taskmanager.current_proc = None self.cmdloop() def precmd(self, line): return line def postcmd(self, stop, line): self.prompt = "dff " + self.vfs.getcwd().path + "/" + self.vfs.getcwd( ).name + " > " return stop def preloop(self): return def postloop(self): print "Exiting..." def onecmd(self, line): try: if line == 'exit' or line == 'quit': return 'stop' exc_list = self.line_to_arguments.generate(line) if exc_list != None and len(exc_list) > 0: for exc in exc_list: exec_type = ["console"] if line[-1:] == "&": exec_type += ["thread"] for cmd, args in exc.iteritems(): if cmd != None: self.history.add(line.strip()) self.taskmanager.add(cmd, args, exec_type) else: return self.emptyline() except: exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback, None, sys.stdout) def emptyline(self): pass def default(self, line): try: exec(line) in self._locals, self._globals except Exception, e: print e.__class__, ":", e