[Tutor] using cmd

Alan Gauld alan.gauld at freenet.co.uk
Sat Mar 18 14:02:53 CET 2006

>I just completed an assignment out of Learning Python
> in which I used the Cmd class from the cmd module to
> create a little shell:

> Originally, I called the function 'ls', but when I did
> that, the function didn't work when I typed 'ls' at
> the prompt.  When I looked in the back of the book, I
> saw the name the authors gave their function, which
> was 'do_ls'.  When I changed the function's name to
> do_ls, the function worked when I typed 'ls' at the
> prompt.  Does anyone know why this happened?

Its just how the module works - many GUI frameworks 
adopt a similar convention - eg Visual Basic command handlers.

My guess os that cmd builds the command string then uses eval() to 
execute the function, but I could be wrong. But in general frameworks 
like cmd will either:
1) expect some kind of standard naming scheme 
    (like cmd apparently does) or
2) Have some form of function registration mechanism so that code 
    looks like

def someFunc(): 
    # blah, blah
registerFunc("someCommand', someFunc)

def another():
   # and more here
registerFunc("another", another)

Or sometimes as a table:

def foo(): # blah
def baz(): # more blah

registerFuncs( {"commandFoo": foo, "commandBaz": baz})

wxPython (Or more accurately its underlying framework, wxWidgets) 
uses this second approach, for example. As does Microsoft in their 
MFC C++ framework.


Alan G
Author of the learn to program web tutor

More information about the Tutor mailing list