(Arne Babenhauserheide)
2013-04-11: added console recipe. added console recipe.
diff --git a/console.py b/console.py new file mode 100644 --- /dev/null +++ b/console.py @@ -0,0 +1,93 @@ +## console.py +## Author: James Thiele +## Date: 27 April 2004 +## Version: 1.0 +## Location: http://www.eskimo.com/~jet/python/examples/cmd/ +## Source: http://code.activestate.com/recipes/280500-console-built-with-cmd-object/ +## License: PSF +## Copyright (c) 2004, James Thiele + +import os +import cmd +import readline + +class Console(cmd.Cmd): + + def __init__(self): + cmd.Cmd.__init__(self) + self.prompt = "=>> " + self.intro = "Welcome to console!" ## defaults to None + + ## Command definitions ## + def do_hist(self, args): + """Print a list of commands that have been entered""" + print self._hist + + def do_exit(self, args): + """Exits from the console""" + return -1 + + ## Command definitions to support Cmd object functionality ## + def do_EOF(self, args): + """Exit on system end of file character""" + return self.do_exit(args) + + def do_shell(self, args): + """Pass command to a system shell when line begins with '!'""" + os.system(args) + + def do_help(self, args): + """Get help on commands + 'help' or '?' with no arguments prints a list of commands for which help is available + 'help <command>' or '? <command>' gives help on <command> + """ + ## The only reason to define this method is for the help text in the doc string + cmd.Cmd.do_help(self, args) + + ## Override methods in Cmd object ## + def preloop(self): + """Initialization before prompting user for commands. + Despite the claims in the Cmd documentaion, Cmd.preloop() is not a stub. + """ + cmd.Cmd.preloop(self) ## sets up command completion + self._hist = [] ## No history yet + self._locals = {} ## Initialize execution namespace for user + self._globals = {} + + def postloop(self): + """Take care of any unfinished business. + Despite the claims in the Cmd documentaion, Cmd.postloop() is not a stub. + """ + cmd.Cmd.postloop(self) ## Clean up command completion + print "Exiting..." + + def precmd(self, line): + """ This method is called after the line has been input but before + it has been interpreted. If you want to modifdy the input line + before execution (for example, variable substitution) do it here. + """ + self._hist += [ line.strip() ] + return line + + def postcmd(self, stop, line): + """If you want to stop the console, return something that evaluates to true. + If you want to do some post command processing, do it here. + """ + return stop + + def emptyline(self): + """Do nothing on empty input line""" + pass + + def default(self, line): + """Called on an input line when the command prefix is not recognized. + In that case we execute the line as Python code. + """ + try: + exec(line) in self._locals, self._globals + except Exception, e: + print e.__class__, ":", e + +if __name__ == '__main__': + console = Console() + console . cmdloop()