(original) (raw)

import os import cmd import readline class Shell(cmd.Cmd, object): def __init__(self): cmd.Cmd.__init__(self) self.prompt = "raidCloud 0.1 > " self.intro = "Welcome to raidCloud!" ## defaults to None self.__setCanExit(True) def __canExit(self): return self.canExit def __setCanExit(self, value): self.canExit = value ## 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 print "Bye!" def emptyline(self): """Do nothing on empty input line""" pass def __listdir(self, root): "List directory 'root' appending the path separator to subdirs." res = [] for name in os.listdir(root): path = os.path.join(root, name) if os.path.isdir(path): name += os.sep res.append(name) return res def __complete_path(self, path=None): "Perform completion of filesystem path." if not path: return self.__listdir('.') dirname, rest = os.path.split(path) tmp = dirname if dirname else '.' res = [os.path.join(dirname, p) for p in self.__listdir(tmp) if p.startswith(rest)] # more than one match, or single match which does not exist (typo) if len(res) > 1 or not os.path.exists(path): return res # resolved to a single directory, so return list of files below it if os.path.isdir(path): return [os.path.join(path, p) for p in self.__listdir(path)] # exact file match terminates this completion return [path + ' '] def do_exit(self, args): """Exits from the console""" if self.__canExit(): return True print "Please, wait until all operations end" return False ## 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