title: Check argument passed via python cmd module
body: <p>This is a two parts question, please see below:</p>
  
  <ul>
  <li>I need to create some sort of console to be used by testers to run some commands manually! <strong>Is the <code>cmd</code> module a good way to go?</strong></li>
  </ul>
  
  <p>Below Is the code I have so far using <code>cmd</code> module, I am only trying to learn and I have two questions so far:</p>
  
  <ul>
  <li><p>why is the <strong>auto-completion</strong> feature not working? If I double <code>&lt;TAB&gt;</code> I get nothing and the cursor just moves forward. Isn't the auto-complete feature provided by default?</p></li>
  <li><p>Do I have to handle faulty number of arguments for each method? I would like the methods-'help' text to show up automatically if methods are called with faulty number of arguments or when they should be called with argument and they were not.</p></li>
  </ul>
  
  <p>.</p>
  
  <pre><code>class InteractiveConsole(cmd.Cmd):
      """ Interactive command line """
  
      def __init__(self):
          cmd.Cmd.__init__(self)
          self.prompt = "=&gt;&gt; "
          self.intro = "Welcome to IRT console!"
  
      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
  
      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 &lt;command&gt;' or '? &lt;command&gt;' gives help on &lt;command&gt;
          """
          # # 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 modify the input line
              before execution (for example, variable substitution) do it here.
          """
          if line != '':
              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 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
  
      def emptyline(self):
          """Do nothing on empty input line"""
          pass
  
  
  
  
  
      def do_install(self, pathToBuild):
          """install [pathToBuild]
          install using the specified file"""
          if pathToBuild:
              print "installing %s" % pathToBuild
          else:
              print "&lt;ERROR&gt; You must specify the absolute path to a file which should be used!"
  
  
      def do_configure(self, pathToConfiguration):
          """configure [pathToConfiguration]
          configure using the specified file"""
          if pathToConfiguration:
              print "configuring %s" % pathToConfiguration
          else:
              print "&lt;ERROR&gt; You must specify the absolute path to a file which should be used!"
  </code></pre>