##
5.13.1 Cmd Objects

A `Cmd` instance has the following methods:

`cmdloop`([intro])
  Repeatedly issue a prompt, accept input, parse an initial prefix off the received input, and dispatch to action methods, passing them the remainder of the line as argument.

  The optional argument is a banner or intro string to be issued before the first prompt (this overrides the `intro` class member).

  If the `readline` module is loaded, input will automatically inherit bash-like history-list editing (e.g. `Ctrl-P` scrolls back to the last command, `Ctrl-N` forward to the next one, `Ctrl-F` moves the cursor to the right non-destructively, `Ctrl-B` moves the cursor to the left non-destructively, etc.).

  An end-of-file on input is passed back as the string `'EOF'`.

  An interpreter instance will recognize a command name "`foo`" if and only if it has a method `do_foo()`. As a special case, a line beginning with the character "`?`" is dispatched to the method `do_help()`. As another special case, a line beginning with the character "`!`" is dispatched to the method `do_shell` (if such a method is defined).

  All subclasses of `Cmd` inherit a predefined `do_help`. This method, called with an argument `bar`, invokes the corresponding method `help_bar()`. With no argument, `do_help()` lists all available help topics (that is, all commands with corresponding `help_*()` methods), and also lists any undocumented commands.

`onecmd`(str)
  Interpret the argument as though it had been typed in response to the prompt. This may be overridden, but should not normally need to be; see the `precmd()` and `postcmd()` methods for useful execution hooks. The return value is a flag indicating whether interpretation of commands by the interpreter should stop.

`emptyline`()
  Method called when an empty line is entered in response to the prompt. If this method is not overridden, it repeats the last nonempty command entered.

`default`(line)
  Method called on an input line when the command prefix is not recognized. If this method is not overridden, it prints an error message and returns.

`precmd`()
  Hook method executed just before the command line line is interpreted, but after the input prompt is generated and issued. This method is a stub in `Cmd`; it exists to be overridden by subclasses. The return value is used as the command which will be executed by the `onecmd()` method; the `precmd()` implementation may re-write the command or simply return line unchanged.

`postcmd`(stop, line)
  Hook method executed just after a command dispatch is finished. This method is a stub in `Cmd`; it exists to be overridden by subclasses. line is the command line which was executed, and stop is a flag which indicates whether execution will be terminated after the call to `postcmd()`; this will be the return value of the `onecmd()` method. The return value of this method will be used as the new value for the internal flag which corresponds to stop; returning false will cause interpretation to continue.

`preloop`()
  Hook method executed once when `cmdloop()` is called. This method is a stub in `Cmd`; it exists to be overridden by subclasses.

`postloop`()
  Hook method executed once when `cmdloop()` is about to return. This method is a stub in `Cmd`; it exists to be overridden by subclasses.

Instances of `Cmd` subclasses have some public instance variables:

`prompt`
  The prompt issued to solicit input.

`identchars`
  The string of characters accepted for the command prefix.

`lastcmd`
  The last nonempty command prefix seen.

`intro`
  A string to issue as an intro or banner. May be overridden by giving the `cmdloop()` method an argument.

`doc_header`
  The header to issue if the help output has a section for documented commands.

`misc_header`
  The header to issue if the help output has a section for miscellaneous help topics (that is, there are `help_*()` methods without corresponding `do_*()` methods).

`undoc_header`
  The header to issue if the help output has a section for undocumented commands (that is, there are `do_*()` methods without corresponding `help_*()` methods).

`ruler`
  The character used to draw separator lines under the help-message headers. If empty, no ruler line is drawn. It defaults to "`=`".

`use_rawinput`
  A flag, defaulting to true. If true, `cmdloop()` uses `raw_input()` to display a prompt and read the next command; if false, `sys.stdout.write()` and `sys.stdin.readline()` are used.