(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()