python cmd.Cmd auto complete feature

Jean-Michel Pichavant jeanmichel at sequans.com
Tue Mar 8 12:28:26 EST 2011


Hello folks,

I'm trying to autoexpand values as well as arguments using the builtin 
cmd.Cmd class.

I.E.
Consider the following command and arguments:

 > sayHello target=Georges
'Hello Georges !'

I can easily make 'tar' expand into 'target=' however I'd like to be 
able to expand the value as well, choosing the target within a 
predefined list. ie.
 > sayHello target=<tab>
target=Georges target=Charles

However I have the feeling that cmd.Cmd consider the '=' character in 
the way it will not try to expand anything beyond. When double tabbing 
after the '=' it will print the list of available arguemnt (i.e 
['target'] in the exemple above).
Ddd anyone successfuly expand values with cmd.Cmd ?

JM

Here a code sample illutrating the issue, type the linde "sayHello 
target=<tab><tab>" to trigger the problem:

import cmd

class SayHello(cmd.Cmd):
    def do_sayHello(self, line):
        print 'Hello %s !' % line.split('=')[1]
   
    def complete_sayHello(self, text, line, begidx, endidx):
        cmds = ['target', 'anotherCmd']
        targets = ['Georges', 'Charles']
        if text.startswith('target='):
            completions = [target for target in ['target=Georges', 
'target=Charles'] if target.startswith(text)]
        else:
            completions = [_cmd for _cmd in cmds if _cmd.startswith(text)]
        return completions
   
    def do_EOF(self, line):
        return True

if __name__ == '__main__':
    SayHello().cmdloop()



More information about the Python-list mailing list