oops, error in the example: s/commandLoop/CommandLoop/g On 2/19/06, Crutcher Dunnavant <[EMAIL PROTECTED]> wrote: > This is something I've been working on for a bit, and I think it is > more or less ready to bring up on this list. I'd like to add a module > (though probably not for 2.5). > > Before you ask, this module is _not_ compatible with cmd.py, as it is > command oriented, whereas cmd.py is line oriented. > > Anyway, I'm looking for feedback, feature requests before starting the > submission process. > > Code available here: > http://littlelanguages.com/web/software/python/modules/cmdloop.py > > Base class for writing simple interactive command loop environments. > > CommandLoop provides a base class for writing simple interactive user > environments. It is designed around sub-classing, has a simple command > parser, and is trivial to initialize. > > Here is a trivial little environment written using CommandLoop: > > import cmdloop > > class Hello(cmdloop.commandLoop): > PS1='hello>' > > @cmdloop.aliases('hello', 'hi', 'hola') > @cmdloop.shorthelp('say hello') > @cmdloop.usage('hello TARGET') > def helloCmd(self, flags, args): > ''' > Say hello to TARGET, which defaults to 'world' > ''' > if flags or len(args) != 1: > raise cmdloop.InvalidArguments > print 'Hello %s!' % args[0] > > @cmdloop.aliases('quit') > def quitCmd(self, flags, args): > ''' > Quit the environment. > ''' > raise cmdloop.HaltLoop > > Hello().runLoop() > > Here's a more complex example: > > import cmdloop > > class HelloGoodbye(cmdloop.CommandLoop): > PS1='hello>' > > def __init__(self, default_target = 'world'): > self.default_target = default_target > self.target_list = [] > > @cmdloop.aliases('hello', 'hi', 'hola') > @cmdloop.shorthelp('say hello') > @cmdloop.usage('hello [TARGET]') > def helloCmd(self, flags, args): > ''' > Say hello to TARGET, which defaults to 'world' > ''' > if flags or len(args) > 1: > raise cmdloop.InvalidArguments > if args: > target = args[0] > else: > target = self.default_target > if target not in self.target_list: > self.target_list.append(target) > print 'Hello %s!' % target > > @cmdloop.aliases('goodbye') > @cmdloop.shorthelp('say goodbye') > @cmdloop.usage('goodbye TARGET') > def goodbyeCmd(self, flags, args): > ''' > Say goodbye to TARGET. > ''' > if flags or len(args) != 1: > raise cmdloop.InvalidArguments > target = args[0] > if target in self.target_list: > print 'Goodbye %s!' % target > self.target_list.remove(target) > else: > print "I haven't said hello to %s." % target > > @cmdloop.aliases('quit') > def quitCmd(self, flags, args): > ''' > Quit the environment. > ''' > raise cmdloop.HaltLoop > > def _onLoopExit(self): > if len(self.target_list): > self.pushCommands(('quit',)) > for target in self.target_list: > self.pushCommands(('goodbye', target)) > else: > raise cmdloop.HaltLoop > > HelloGoodbye().runLoop() > > -- > Crutcher Dunnavant <[EMAIL PROTECTED]> > littlelanguages.com > monket.samedi-studios.com >
-- Crutcher Dunnavant <[EMAIL PROTECTED]> littlelanguages.com monket.samedi-studios.com _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com